CSharp - C 调用基类构造函数

  显示原文与译文双语对照的内容

如果我从基类继承,并想将继承的类的构造函数传递给基类的构造函数,我该如何做?

比如,

如果从异常类继承,我想执行如下操作:


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

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

时间:

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


public class MyExceptionClass : Exception
{
 public MyExceptionClass(string message, string extrainfo) : base(message)
 {
//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;
 }
 }

如果你需要调用基本构造函数而不是立即调用,因为你的新( 派生) 类需要进行一些数据操作,最好的解决方案是使用工厂方法。 你需要做的是标记私有的派生构造函数,然后在类中创建一个静态方法,该方法会执行所有必要的操作,然后调用构造函数并返回对象。


public class MyClass : BaseClass
{
 private MyClass(string someString) : base(someString)
 {
//your code goes in here
 }

 public static MyClass FactoryMethod(string someString)
 {
//whatever you want to do with your string before passing it in
 return new MyClass(someString);
 }
}


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

你可以将内部异常传递给一个构造函数。

使用基本( something ) 调用基类构造函数是正确的,但是在重载时使用这个关键字


public ClassName() : this(par1,par2)
{
//do not call the constructor it is called in the this.
//the base key- word is used to call a inherited constructor 
} 

//Hint used overload as often as needed do not write the same code 2 or more times


class Exception
{
 public Exception(string message)
 {
 [...]
 }
}

class MyExceptionClass : Exception
{
 public MyExceptionClass(string message, string extraInfo)
 : base(message)
 {
 [...]
 }
}

...