Nota: Este artigo foi publicado originalmente em 2011. Alguns passos, comandos ou versões de software podem ter mudado. Consulte a documentação atual de .Net para as informações mais recentes.
Pré-requisitos
Antes de começar, certifique-se de ter:
- Visual Studio or .NET CLI installed
- .NET Framework or .NET Core SDK
- Basic C# programming knowledge
Recently I decided I wanted to start creating children classes to handle my Exceptions, but I ran into the issue that I couldn’t quite call the base constructor and I kept asking myself why if I didn’t define a constructor the class couldn’t use the base class and automatically expose them. So below is kind of what I was doing:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//This is where it's all falling apart
base(message);
}
}
Basically, after reading up I realized I was misusing the base class and Visual Studio was as kind as to provide a snippet you can use to create your own exception class:
/// <summary>
/// TODO: Update summary.
/// </summary>
public class MyException : Exception
{
public MyException() { }
public MyException(string message) : base(message) { }
public MyException(string message, Exception inner) : base(message, inner) { }
protected MyException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}
As you can tell you can only use the ‘base()’ method as part of the declaration of the constructor. So… what if I want to modify that message in a special way? Say, you want to prefix all your messages with something. No big deal, you can use static methods to change a parameter this way:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string prefix) :
base(ModifyMessage(message, prefix))
{
}
private static string ModifyMessage(string message, string prefix)
{
return prefix + message;
}
}
So, if you continue to explore all you can do with constructors you come across the fact that you can call one constructor from another (in the same child class). For example:
// Constructor 1
public MyExceptionClass(string message, string extraInfo) :
this(Convert.ToInt32(extraInfo)) // Calls Constructor 2
{
// Do nothing.
}
// Constructor 2
public MyExceptionClass(int index)
{
// Do something?
}
Resumo
You’ve successfully learned call a base constructor in c#.net. If you run into any issues, double-check the prerequisites and ensure your .Net environment is properly configured.