我知道始终将异常序列化是一件好事。但是它们是否应该始终是public的呢?即使它们只应该在内部捕获?如果异常不是public,是否可能存在安全问题或序列化问题(例如跨应用程序域的封送)。
如果你知道异常总是会被自己的代码捕获,那么将其设置为internal
是可以的。
这与任何作用域的范围相同。所有内容都应该在适当的作用域内。
如果您在特定类中创建异常,并且仅在类内部使用该异常,则它应该仅在类内部具有作用域,因此应该是私有的。但是,这种情况并不常见。
一旦您有一个将传递给调用您的类的另一个对象的异常,您应该将其设置为公共。这是异常的最常见用法,因此大多数异常应该是公共的。
namespace MyAPI
{
public class PublicException : System.Exception
{
}
// derive my public exceptions from this
public class CatchableException : PublicException
{
}
// stuff that should never reach the users of my API
internal class InvisibleException : System.Exception
{
}
}
这样,我的API的用户就有一个捕获我抛出的任何异常的工具。内部异常永远不会到达那里。