当我创建一个继承自MarshalByRefObject的类,比如ClassA,然后使用RemotingServices.Marshal方法创建ObjRef对象时,它是否序列化了ClassA的所有私有字段?
谢谢
发布于 2008-11-26 16:30:15
不是的。MarshalByRefObject的思想是,它并不是为了远程处理目的而每次都被序列化。相反,CLR生成该场景中称为透明代理的内容。它之所以被称为透明,是因为它的外观和行为都与ClassA类似,但实际上并不是ClassA。对ClassA实例的所有调用都经过远程处理边界被编组到创建ClassA的原始AppDomain中。
编辑:回应进一步的澄清。
在此场景中将数据传递给MarshalByRefObject时,需要考虑数据的类型。本质上是从MarshalByRefObject派生的,或者不是从MarshalByRefObject派生的,那么参数将作为代理传递。如果它不是从MarshalByRefObject派生的,那么它将被序列化,作为一系列字节传递到AppDomain边界,然后在目标AppDomain中反序列化。
您的场景列出了不属于MarshalByRef的字符串(通常我将这些字符串称为MarshalByValue,但这完全是惯例)。因此,当通过远程处理边界传递时,它们将被序列化。
https://stackoverflow.com/questions/321301
复制相似问题