Ale*_*xis 34 c# coding-style exception
从MSDN,代码分析警告CA1032:
Exception types must implement the following constructors:
Fre*_*örk 11
你已经得到了一些好的答案.我只想补充说,提供这些额外的构造函数并不一定需要大量的编码.由于它们已经在基类中实现,因此您可以简单地让它们完成工作:
public class MyCustomException : Exception
{
public MyCustomException() : base() { }
public MyCustomException(string message) : base(message) { }
public MyCustomException(string message, Exception innerException) : base(message, innerException) { }
// and so on...
}
Run Code Online (Sandbox Code Playgroud)
因此,您只需要实现代码,其中异常的行为与基类的行为不同.
无参数和序列化构造函数由需要在域之间移动异常的通用“异常路由”代码使用(例如,跨服务和客户端之间的互联网)。
采用另一个的Exception方法是可以通过InnerException属性链接所有异常。
最后,还有一个接受消息字符串的方法,它有助于合理一致地使用异常。
实现标准异常构造函数允许人们以内置于所有现有 .NET 异常中的标准、熟悉的方式使用异常。前三个可以是可选的,如果由于某种原因您不想使用其中一个(尽管我无法理解为什么您会想要使用它们。)但是,最后一个是反序列化构造函数,如果您愿意如果您的例外是在任何类型的分布式环境(.NET Remoting、ASP.NET Web Services、WCF 等)中得到支持,那么它就非常重要。
如果没有反序列化构造函数和 [Serialized] 属性,您的异常将无法在分布式环境中运行,并且可能会导致其他问题。鉴于此,以及精通 C# 开发人员的熟悉程度,最好至少实现 4 个标准异常构造函数,并使用 [Serialized] 标记异常。
mqp*_*mqp -1
好吧,为了使自定义异常正确可用,接受内部异常的构造函数是非常必要的。如果没有它,如果有人捕获了您的异常,他们将无法触发更具描述性或适当的异常,同时保留您的原始异常(及其携带的信息,例如堆栈跟踪)。