如果我从基类继承并希望将继承类的构造函数中的某些东西传递给基类的构造函数,我该怎么做?
例如,
如果我从Exception类继承,我想做这样的事情:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//This is where it's all falling apart
base(message);
}
}
基本上我想要的是能够将字符串消息传递给基本的Exception类 .
10 回答
确实使用
base
(某物)来调用基类构造函数,但是在重载的情况下使用this
关键字将构造函数修改为以下内容,以便正确调用基类构造函数:
请注意,构造函数不是您可以在方法中随时调用的东西 . 这就是你在构造函数体中调用错误的原因 .
请注意,您可以在对基础构造函数的调用中使用 static 方法 .
From Framework Design Guidelines and FxCop rules. :
1. Custom Exception should have a name that ends with Exception
2. Exception should be public
3. CA1032: Exception should implements standard constructors.
公共无参数构造函数 .
具有一个字符串参数的公共构造函数 .
具有一个字符串和Exception的公共构造函数(因为它可以包装另一个Exception) .
如果类型未密封,则序列化构造函数受保护;如果类型已密封,则为private . 基于MSDN:
要么
如果您需要调用基础构造函数但不是立即调用,因为新(派生)类需要进行一些数据操作,最好的解决方案是采用工厂方法 . 你需要做的是标记私有你的派生构造函数,然后在你的类中创建一个静态方法,它将执行所有必要的东西,然后调用构造函数并返回对象 .
根据此处列出的其他一些答案,您可以将参数传递给基类构造函数 . 建议在继承类的构造函数的开头调用基类构造函数 .
我注意到在您的示例中您从未使用过
extraInfo
参数,因此我假设您可能希望将extraInfo
字符串参数连接到异常的Message
属性(似乎在接受的答案和代码中忽略了这一点)你的问题) .这可以通过调用基类构造函数,然后使用额外信息更新Message属性来实现 .
或者,由于
Message
属性是从基类继承的,因此您甚至不必显式调用基类构造函数 . 您可以直接从继承类的构造函数更新Message
属性,如下所示:您可以将内部异常传递给其中一个构造函数 .
您还可以在构造函数中使用参数进行条件检查,这允许一些灵活性 .
要么