如果我从基类继承,并想将继承类的构造函数传递给基类的构造函数,我该怎么做?
例如,如果我从Exception类继承,我希望执行以下操作:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//This is where it's all falling apart
base(message);
}
}
基本上,我希望能够将字符串消息传递给基础Exception类。
来自框架设计指南和FxCop规则。:
1.自定义异常的名称应以异常结尾
class MyException : Exception
2.异常应为公共
public class MyException : Exception
3.CA1032:异常应实现标准构造函数。
公共无参数构造函数。具有一个字符串参数的公共构造函数。具有一个字符串和异常的公共构造函数(因为它可以包装另一个异常)。如果类型未密封,则受保护的序列化构造函数;如果类型已密封,则为私有构造函数。基于MSDN:[可串行化()]公共类MyException:异常{公共MyException(){//添加任何类型特定的逻辑,并提供默认消息。}公共MyException(字符串消息):基本(消息){//添加任何类型特定的逻辑。}公共MyException(字符串消息,异常innerException):基本(消息,内部异常){//为内部异常添加任何特定于类型的逻辑。}受保护的MyException(SerializationInfo信息,StreamingContext上下文):基本(信息,上下文){//实现特定于类型的序列化构造函数逻辑。}}
or
[Serializable()]
public sealed class MyException : Exception
{
public MyException()
{
// Add any type-specific logic, and supply the default message.
}
public MyException(string message): base(message)
{
// Add any type-specific logic.
}
public MyException(string message, Exception innerException):
base (message, innerException)
{
// Add any type-specific logic for inner exceptions.
}
private MyException(SerializationInfo info,
StreamingContext context) : base(info, context)
{
// Implement type-specific serialization constructor logic.
}
}
根据这里列出的一些其他答案,您可以将参数传递给基类构造函数。建议在继承类的构造函数的开头调用基类构造函数。
public class MyException : Exception
{
public MyException(string message, string extraInfo) : base(message)
{
}
}
我注意到,在您的示例中,您从未使用过extraInfo参数,因此我假设您可能希望将extraInfo字符串参数连接到异常的Message属性(似乎在接受的答案和问题中的代码中忽略了这一点)。
这只需调用基类构造函数,然后使用额外的信息更新Message属性即可实现。
public class MyException: Exception
{
public MyException(string message, string extraInfo) : base($"{message} Extra info: {extraInfo}")
{
}
}