AppDomain.CreateInstance

时间:2009-03-20 14:10:40

标签: c# appdomain

当我们使用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 [0] =问候

3 个答案:

答案 0 :(得分:3)

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

我发现documentation and example for ObjectHandle.Unwrap信息量很大,而MarshalByRefObject documentation也是如此。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

它返回一个ObjectHandle,用于在程序集中创建指定类型的实例,并提供wrap(serialized)实例化时的句柄,何时需要unwrap(deserialized) Proxy返回真实{{1}}。

相关问题