1

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

谢谢

4

1 回答 1

3

不,MarshalByRefObject 的想法是,它并不是每个都为了远程处理而序列化。相反,CLR 在这种情况下生成所谓的透明代理。之所以称为透明,是因为它的外观和行为与 ClassA 相似,但实际上并非 ClassA。对 ClassA 实例的所有调用都跨远程处理边界编组到创建 ClassA 的原始 AppDomain 中。

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

在这种情况下将数据传递给 MarshalByRefObject 时,您需要考虑数据的类型。本质上是从 MarshalByRefObject 派生的,或者不是。如果它确实从 MarshalByRefObject 派生,则该参数将作为代理传递。如果它不是从 MarshalByRefObject 派生的,那么它将被序列化,作为一系列字节穿过 AppDomain 边界,然后在目标 AppDomain 中反序列化。

您的场景列出了不是 MarshalByRef 的字符串(通常我将它们称为 MarshalByValue ,但这纯粹是约定)。因此,当它们穿过您的远程边界时,它们将被序列化。

于 2008-11-26T16:30:15.403 回答