自己的异常 class 构造函数

Own exception class constructors

在文章 "Best Practices for Exceptions" (http://msdn.microsoft.com/en-us/library/seyhszts(v=vs.110).aspx) 中,我发现了以下条款:

In C# and C++, use at least the three common constructors when creating your own exception classes: the default constructor, a constructor that takes a string message, and a constructor that takes a string message and an inner exception.

为什么一定要定义这三个公共构造函数?如果没有额外的自定义属性,我的异常 class 是无用的,我应该在我的异常 class 构造函数中将它们的值作为参数传递。

您应该定义这些构造函数,因为大多数开发人员都希望它们在那里。有一些模式,如包装异常,只有在您可以指定内部异常时才能完成。这些最佳实践确保您始终可以使用这些模式。例如:

try { ... }
catch (Exception ex)
{
    throw new MyBusinessException(ex);
}

另一方面,这不是必须的。如果您的异常从一组参数构建自己的消息,那么让用户更改它是没有意义的。