当我们使用AppDomain.CreateInstance(“程序集名称”,类型名称),并且我的类继承自MarshalByRefObject时,内部会发生什么?它是在创建TransparetnProxy吗?
代码:
class Greet : MarshalByRefObejct
{
...
}
class test
{
public static void Main(string[] args)
{
AppDomain ad = AppDomain.CreateDomain("Second");
ObjectHandle hObj = ad.CreateInstance("Test", args[0]);
....
}
}传入args = Greet
发布于 2009-03-20 14:16:50
是的,它创建了一个透明的代理,你可以通过展开对象句柄来获得它。
我发现和一般的MarshalByRefObject documentation一样,documentation and example for ObjectHandle.Unwrap的信息量也很大。
发布于 2009-03-20 14:17:56
是。
您可能还想看看CreateInstanceAndUnwrap。如果Main和Greet类中的代码共享一个公共接口,则可以使用TransparentProxy将hObj强制转换为接口并调用接口上的方法。
发布于 2012-04-27 21:46:57
AppDomain.CoCreateInstance()接受两个参数,即哪个程序集和它们的类型名称。
它返回一个ObjectHandle,用于在程序集中创建指定类型的实例,并提供句柄,wrap(serialized)在实例化和需要时通过该句柄返回到真正的Proxy。
https://stackoverflow.com/questions/666301
复制相似问题