首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarshalByRefObject很特别吗?

MarshalByRefObject很特别吗?
EN

Stack Overflow用户
提问于 2010-04-27 19:27:37
回答 2查看 10.2K关注 0票数 47

.NET有一种叫做远程处理的东西,你可以在不同的应用域甚至是物理机器之间传递对象。我不完全理解魔法是如何实现的,因此我提出了这个问题。

在远程处理中,有两种传递对象的基本方法--它们可以被序列化(转换为一堆字节并在另一端重新构建),或者它们可以从MarshalByRefObject继承,在这种情况下,.NET会建立一些透明的代理,所有的方法调用都会被转发回原始实例。

这很酷,像魔术一样工作。我不喜欢编程中的魔法。使用反射器查看MarshalByRefObject时,我看不到任何可以将其与其他典型对象区分开来的东西。甚至没有奇怪的内部属性或任何东西。那么整个透明代理是如何组织起来的呢?我能自己做一个这样的机制吗?我是否可以创建一个不继承MarshalByRefObject,但行为仍然相同的备用MyMarshalByRefObject?或者,MarshalByRefObject正在接受.NET引擎本身的一些特殊处理,并且整个远程处理的壮举对于凡人来说是不可复制的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-02 19:32:29

神奇之处似乎在于一个特殊的TransparentProxy类-- .NET运行时以一种特殊的方式处理它。

如果你想使用它,请参阅an article about RealProxy

  • If如果你想阅读更多关于“

我认为MarshalByRefObject可能包含一些额外的内部信息,这些信息可能对此机制有帮助,但我并没有深入研究。

票数 20
EN

Stack Overflow用户

发布于 2010-04-27 19:46:59

我相信MarshalByRefObject并没有那么特别。我相信它存在的全部原因在于它的生命周期管理和如何在服务器上对其进行垃圾回收。在LifetimeServices类文档中有一些很好的注释。

AFAIK,远程处理的真正魔力是在您设置主机时由远程处理基础结构自己完成的。MarshalByRefObject并没有在AppDomains中做任何真正的编组工作。

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

https://stackoverflow.com/questions/2720703

复制
相关文章

相似问题

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