当我们使用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] =问候
答案 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}}。