.NET有一个叫做远程处理(Remoting)的东西,可以在不同的应用程序域或甚至物理机器之间传递对象。我不完全明白这种魔法是如何实现的,因此提出了这个问题。
在远程处理中,有两种基本的传递对象的方法 - 要么将对象序列化(转换为一堆字节并在另一端重新构建),要么从MarshalByRefObject继承,这种情况下.NET会创建一些透明代理,并将所有方法调用转发回原始实例。
这很酷,就像魔法一样。但我不喜欢编程中的魔法。通过反射查看MarshalByRefObject
,我没有看到任何使它与其他典型对象区别开来的地方。甚至没有奇怪的内部属性或任何其他标志。那么整个透明代理机制是如何组织的呢?我能否自己制作这样的机制?我能否创建一个替代品MyMarshalByRefObject
,它不继承MarshalByRefObject
但仍然具有相同的功能?还是说MarshalByRefObject
在.NET引擎本身中受到了特殊处理,整个远程处理功能只能由非凡之人完成?