首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarshalByRefObject与系列化

MarshalByRefObject与系列化
EN

Stack Overflow用户
提问于 2008-11-26 16:23:21
回答 1查看 2.2K关注 0票数 1

当我创建一个继承自MarshalByRefObject的类,比如ClassA,然后使用RemotingServices.Marshal方法创建ObjRef对象时,它是否序列化了ClassA的所有私有字段?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2008-11-26 16:30:15

不是的。MarshalByRefObject的思想是,它并不是为了远程处理目的而每次都被序列化。相反,CLR生成该场景中称为透明代理的内容。它之所以被称为透明,是因为它的外观和行为都与ClassA类似,但实际上并不是ClassA。对ClassA实例的所有调用都经过远程处理边界被编组到创建ClassA的原始AppDomain中。

编辑:回应进一步的澄清。

在此场景中将数据传递给MarshalByRefObject时,需要考虑数据的类型。本质上是从MarshalByRefObject派生的,或者不是从MarshalByRefObject派生的,那么参数将作为代理传递。如果它不是从MarshalByRefObject派生的,那么它将被序列化,作为一系列字节传递到AppDomain边界,然后在目标AppDomain中反序列化。

您的场景列出了不属于MarshalByRef的字符串(通常我将这些字符串称为MarshalByValue,但这完全是惯例)。因此,当通过远程处理边界传递时,它们将被序列化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/321301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档