Activator.CreateInstance()重载具有不同的返回类型

时间:2014-06-26 15:46:00

标签: c# .net reflection

我使用Activator.CreateInstance在我的项目中构建对象。 我已经注意到,根据您调用的CreateInstance超载情况,您可以获得所请求的对象或ObjectHandle

这是为什么?这对我来说似乎非常违反直觉。

public static Object CreateInstance( Type type )

public static ObjectHandle CreateInstance( string assemblyName, string typeName )

取自herehere

1 个答案:

答案 0 :(得分:1)

如果是

public static Object CreateInstance( Type type )

你有可能实例化一个不是MarshalByRefObject的对象,这意味着它不是代理,而是一个真实的对象。

但是在

的情况下
public static ObjectHandle CreateInstance( string assemblyName, string typeName )

有可能,正在创建的对象要么在活动的.net执行上下文中实例化,要么可能将程序集的类型配置为通过底层代理连接到远程对象通过Unwrap() ObjectHandle方法返回,可以在另一个AppDomain中创建远程对象。另一个AppDomain可以存在于同一个进程中,同一台机器上的不同进程或使用.NET Remoting的另一台机器上的远程进程。

另一个区别是,ObjectHandle.Unwrap()返回的代理对象可能有租约时间。如果已过期,则对此代理对象的任何方法调用都将失败!而CreateInstance(Type)方法返回的对象是真实对象而不是代理。

所以,两种方法都不同。

相关问题