我正在使用 Activator.CreateInstance 在我的项目中构建对象。
我已经注意到,根据您调用的 CreateInstance 的重载,您会得到您请求的对象或 ObjectHandle

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

public static Object CreateInstance( Type type )

public static ObjectHandle CreateInstance( string assemblyName, string typeName )

取自 herehere

最佳答案

的情况下

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/

10-13 08:09