[Serializable] 是不是适用于继承的类?
Posted
技术标签:
【中文标题】[Serializable] 是不是适用于继承的类?【英文标题】:Does [Serializable] work for inherited classes?[Serializable] 是否适用于继承的类? 【发布时间】:2011-01-05 23:37:05 【问题描述】:我在远程处理方面没有做太多工作,所以请原谅这个相当基本的问题,如果我从标记为 [Serializable] 的抽象类派生一个类(用于跨应用程序域传递数据),另一方是否会获得实际覆盖执行?即多态性是否适用于远程处理/可序列化?
我需要在另一边创建一个克隆而不是在原始上操作,所以 MarshalByRef 不是一个选项...
【问题讨论】:
【参考方案1】:查看 [Serializable] 未被继承的最简单方法是按 F12 并在 AttributeUsage 中查看“Inherited = false”。更难的选择是通过http://msdn.microsoft.com/en-us/library/bcfsa90a.aspx 进行 RTFM。
基本上,您需要将所有类标记为可序列化,它们将被正确反序列化。
【讨论】:
【参考方案2】:是的,当您反序列化一个类型时,相同的类型会在远程域中重新构成。
您可以使用 IObjectReference 模式控制反序列化类型:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iobjectreference.aspx
【讨论】:
它是如何工作的?我的意思是我会理解 Serializable 是如何工作的,如果它只是在另一端实例化相同的类型并用它复制所有数据,但是如果我有一些抽象类说 BirdBase 并且另一端继承并传递一个 Bird : BirdBase 它会有发送实际代码..这不是安全问题吗? 双方都必须能够访问序列化类型,以及它包含的所有内容。反序列化器将尝试加载已序列化对象的最终类型。如果失败,则抛出异常。 那行不通:/一方只知道基类,另一方覆盖它以上是关于[Serializable] 是不是适用于继承的类?的主要内容,如果未能解决你的问题,请参考以下文章