Solución:
Modifique su constructor a lo siguiente para que llame correctamente al constructor de la clase base:
public class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extrainfo) : base(message)
{
//other stuff here
}
}
Tenga en cuenta que un constructor no es algo que pueda llamar en cualquier momento dentro de un método. Esa es la razón por la que está recibiendo errores en su llamada en el cuerpo del constructor.
Tenga en cuenta que puede usar estático métodos dentro de la llamada al constructor base.
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo) :
base(ModifyMessage(message, extraInfo))
{
}
private static string ModifyMessage(string message, string extraInfo)
{
Trace.WriteLine("message was " + message);
return message.ToLowerInvariant() + Environment.NewLine + extraInfo;
}
}
Si necesita llamar al constructor base pero no de inmediato porque su nueva clase (derivada) necesita realizar alguna manipulación de datos, la mejor solución es recurrir al método de fábrica. Lo que debe hacer es marcar como privado su constructor derivado, luego crear un método estático en su clase que hará todo lo necesario y luego llamar al constructor y devolver el objeto.
public class MyClass : BaseClass
{
private MyClass(string someString) : base(someString)
{
//your code goes in here
}
public static MyClass FactoryMethod(string someString)
{
//whatever you want to do with your string before passing it in
return new MyClass(someString);
}
}