Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the hueman domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/CloudIngenium.com/htdocs/wp-includes/functions.php on line 6114
How to: Call a base constructor in C#.Net – Knowledge eXchange

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?
}

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.