How to: Call a base constructor in C#.Net
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> [Serializable] 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?
}
Love
Can we use Let's Encrypt, the free and open certificate authority?
Hola! gracias por la info, me sirvió el comando sacandole el nombre del server. En mi caso, fue una migración…
Yes 3rd option helped me too. I removed the WC key Values from config file then started working.
I know this is from 2014. But really, thank you!