Chamando o construtor de base em C#

Se eu herdar de uma classe base e quiser passar algo do construtor da classe herdada para o construtor da classe base, como faço isso?

Por exemplo,

Se eu herdar da classe Exceção, quero fazer algo assim:

class MyExceptionClass : Exception
{
     public MyExceptionClass(string message, string extraInfo)
     {
         //This is where it's all falling apart
         base(message);
     }
}

Basicamente, o que eu quero é poder passar a mensagem de string para a classe base Exceção.

Solução

Modifique seu construtor para o seguinte para que ele chame o construtor da classe base apropriadamente:

public class MyExceptionClass : Exception
{
    public MyExceptionClass(string message, string extrainfo) : base(message)
    {
        //other stuff here
    }
}

Note que um construtor não é algo que você possa chamar a qualquer momento dentro de um método. Isso'é a razão pela qual você'está recebendo erros na sua chamada no corpo do construtor.

Comentários (10)

Note que você pode usar métodos **estáticos*** dentro da chamada para o construtor da 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;
     }
}
Comentários (10)
public class MyExceptionClass : Exception
{
    public MyExceptionClass(string message,
      Exception innerException): base(message, innerException)
    {
        //other stuff here
    }
}

Você pode passar a exceção interna para um dos construtores.

Comentários (0)