gpt4 book ai didi

c# - Serializable 和 MarshalByRefObject 之间的区别

转载 作者:太空狗 更新时间:2023-10-30 00:19:33 25 4
gpt4 key购买 nike

我对 .NET Remoting 中的 [Serializable]:MarshalByRefObject 属性感到很困惑。但是我读了很多关于它的文章。如果我使用 [Serializable] 属性,那么所有方法都完全在调用者域中执行,这意味着不同的调用者应该在他们自己的域中拥有不同方法的副本,并且一个调用者所做的任何更改都不应该反射(reflect)在其他人身上。但是当相同的时候我在我的程序中实现的事情,我没有得到想要的结果。

最佳答案

Serializable 属性用于标记一个对象,当它通过远程处理请求时,它将被序列化为字节数组,作为字节数组从源传输到目标,然后对象的另一个实例是从在目标环境(AppDomain 或应用程序)中生存和呼吸的字节数组重建。对该对象执行的操作不会反射(reflect)到源中。要更新对象,您必须再次访问源并发送更改的对象(当然是作为新的字节数组)。这就像下载文件并修改它一样,您的更改不会反射(reflect)到您下载文件的服务器上。

var user = server.GetUser("edokan");
user.Alias = "edokan2";

var user2 = server.GetUser("edokan");
//user.Alias == user2.Alias; // is false

另一方面,MarshalByRefObject 标记您的对象,而不是您的对象的数据,对您的对象的引用是通过远程处理传递的,并且每个方法调用/每个属性操作都在服务器端执行。这就像将您的问题发布到 StackOverflow 并阅读答案一样,您只有一个浏览器和一个 url 来查看/处理问题。一切都在 StackOverflow 服务器上执行。

您的困惑源于一个非常简单的观点,MS 使远程处理变得如此简单,实际上人们认为一切都在客户端。

关于c# - Serializable 和 MarshalByRefObject 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com