C# MarshallByRefObject和序列化

C# MarshallByRefObject和序列化,c#,remoting,C#,Remoting,当我创建一个类时,比如说ClassA,它继承自MarshalByRefObject,然后使用RemotingServices.Marshal方法创建一个ObjRef对象,它是否序列化ClassA的所有私有字段 谢谢否。MarshallByRefObject的思想是,它不会为了远程处理而被序列化。在这种情况下,CLR会生成所谓的透明代理。之所以称之为透明,是因为它的外观和行为与ClassA一样,但实际上并不是ClassA。对ClassA实例的所有调用都会通过远程处理边界编组到创建ClassA的原始

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


谢谢

否。MarshallByRefObject的思想是,它不会为了远程处理而被序列化。在这种情况下,CLR会生成所谓的透明代理。之所以称之为透明,是因为它的外观和行为与ClassA一样,但实际上并不是ClassA。对ClassA实例的所有调用都会通过远程处理边界编组到创建ClassA的原始AppDomain中

编辑:回应进一步澄清

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

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