在C#中调用基本构造函数

时间:2020-03-05 18:39:50  来源:igfitidea点击:

如果我从基类继承,并希望将某些东西从继承的类的构造函数传递给基类的构造函数,该怎么做?

例如,

如果我从Exception类继承,我想做这样的事情:

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

基本上,我想要的是能够将字符串消息传递给基本Exception类。

解决方案

回答

将构造函数修改为以下代码,以便它正确调用基类的构造函数:

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

请注意,我们不能在方法中的任何时间调用构造函数。这就是在构造函数主体中调用时出错的原因。

回答

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

我们可以将内部异常传递给构造函数之一。

回答

请注意,可以在对基本构造函数的调用中使用静态方法。

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