当对象派生自 MarshalByRefObject 并且也被标记为 [可序列化] 时会发生什么情况

本文关键字:序列化 什么情况 记为 派生 对象 MarshalByRefObject | 更新日期: 2023-09-27 18:19:56

我正在处理我的第一个使用 AppDomain 的项目,我想知道当一个对象派生自 MarshalByRefObject 并且也被标记为 [可序列化]时会发生什么?

例如:

[Serializable]
public class DummyClass: MarshalByRefObject
{
}

当对象派生自 MarshalByRefObject 并且也被标记为 [可序列化] 时会发生什么情况

它通过引用进行编组,但仍然可以针对其他序列化用例进行序列化。有一个非常有趣的实现细节值得注意:为远程处理序列化的格式化程序使用一个SurrogateSelector,该将为其序列化的任何MarshalByRefObject生成代理,因此序列化仍会导致通过引用封送。其他序列化用途不会有这种SurrogateSelector,因此不会有这种效果。