为什么我应该总是使我的例外? (。净)

引用什么是使自定义的.NETexception序列化的正确方法?
和所有的.NETexception是可序列化的? …

为什么我的exception是可序列化的?
有人说如果由第三方库定义的自定义exception是不可序列化的,那么它可以被认为是一个bug。 为什么?

为什么在这方面的例外与其他课程不同?

因为您的exception可能需要在不同AppDomain之间进行编组,所以如果它们不是(正确)可序列化的,将会丢失宝贵的debugging信息。 与其他类不同,你将无法控制你的例外是否被整理 – 它会的。


当我的意思是“你不会有控制权”时,我的意思是你创build的课程一般都有一个有限的存在空间,存在是众所周知的。 如果它是一个返回值,并且有人试图在另一个AppDomain(或另一台机器上)中调用它,那么它们将会出错,并且只能说“不要用那种方式”。 调用者知道他们必须将其转换为可以序列化的types(通过包装方法调用)。 然而,由于例外如果没有被捕获,它们可能会超越AppDomain的界限,甚至不知道自己已经拥有了。 您的自定义应用程序exception深度不同的AppDomain中的20个级别可能是Main()中报告的exception,并且沿途没有任何事情会将其转换为可序列化的exception。

除了Talljoe的回答之外,您的exception也可以跨Web服务传递,在这种情况下,exception需要可序列化/反序列化,以便可以将其转换为XML并通过Web服务

我认为所有类的默认值都应该是可序列化的,除非它们包含一个显式不可序列化的类。 不能因为一些devise师没有考虑就不能转class。

“Final”也是一样,所有的variables默认都是“Final”,除非你明确地说它们是“Mutable”。

此外,我不确定有一个非私有的variables是有意义的。

哦,需要devise我自己的语言。

但是答案是,你不知道你的exception将如何被使用,他们被认为是能够被抛出远程调用。

另一个需要序列化的对象是Asp.Net Session。 我们将最后一个exception存储在Session中,而不是可序列化的exception需要额外的翻译来将它们的细节存储为可序列化(指定原始exception作为内部不起作用)