我知道它是a good thing to always make exceptions serializable。但是,我是否也应该将它们公之于众?即使他们只应该被内部抓住?如果异常不公开,我想知道是否存在任何安全问题或序列化问题(例如,跨应用程序域进行编组)。
答案 0 :(得分:4)
如果您知道该异常将始终被您自己的代码捕获,那么可以使其internal
。
答案 1 :(得分:4)
事实上,如果内部异常不是您界面的一部分,那么没有什么不妥。这意味着
事实上,为模块声明公共基本异常类型是个好主意,因此您的用户始终可以在catch
子句中依赖它。如果您愿意,从基类派生的个别例外可能是公开的,但也可能不是。
请注意,您绝对不能依赖公共/私人机制来确保任何类型的安全性,因为它可以通过简单的反射轻松覆盖。
答案 2 :(得分:0)
与确定任何内容相同。一切都应该在适当的范围内。
如果在特定类中创建异常并且只在类中使用该异常,那么它应该只在类中有一个范围,因此它应该是私有的。但是,这并不常见。
第二个你有一个例外,将被交给另一个叫你班级的对象,你应该把它公之于众。这是例外的最常见用法,因此大多数例外应该是公开的。
答案 3 :(得分:0)
考虑一下......链条到底有多远是一个例外?如果要从公共函数抛出异常,那么它应该是公共的。
也就是说,如果异常始终在您的库中被捕获,并且从未被抛出或重新标记并以其他方式抛出,则它可以是内部的。
理想情况下,我有这种情况:
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用户可以捕获我抛出的任何异常。内部人员从来没有做到那么远。