1

当我们使用 AppDomain.CreateInstance("Assembly name", Type name) 并且我的类继承自 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[0] = Greet

4

3 回答 3

3

是的,它创建了一个透明代理,您可以通过展开对象句柄来获得它。

我发现文档和示例的ObjectHandle.Unwrap信息量很大,一般MarshalByRefObject文档也是如此。

于 2009-03-20T14:16:49.670 回答
1

是的。

您可能还想看看CreateInstanceAndUnwrap。如果您在 Main 和 Greet 类中的代码共享一个公共接口,您可以将 hObj 强制转换到您的接口中并使用 TransparentProxy 调用它的方法。

于 2009-03-20T14:17:56.407 回答
1

AppDomain.CoCreateInstance()接受两个参数,即哪个程序集及其类型名称。

并且它返回一个ObjectHandle用于在程序集中创建指定类型的实例,并且还提供了wrap(serialized)当它被实例化时以及当它需要时它unwrap(deserialized)返回到真实的句柄Proxy

于 2012-04-27T13:46:56.597 回答