我正在使用 Activator.CreateInstance
在我的项目中构建对象。
我已经注意到,根据您调用的 CreateInstance
的重载,您会得到您请求的对象或 ObjectHandle 。
为什么是这样?这对我来说似乎很违反直觉。
public static Object CreateInstance( Type type )
public static ObjectHandle CreateInstance( string assemblyName, string typeName )
取自 here 和 here
最佳答案
的情况下
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)
方法返回的对象是真实对象而不是代理。所以,这两种方法是不同的。
关于c# - Activator.CreateInstance() 重载有不同的返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24434919/