加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 22:05:32 所属栏目:百科 来源:网络整理
导读:我正在使用Activator.CreateInstance在我的项目中构建对象. 我注意到,根据您调用的CreateInstance的重载,您可以获得所请求的对象或 ObjectHandle. 为什么是这样?这对我来说似乎非常违反直觉. public static Object CreateInstance( Type type )public stati
我正在使用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)方法的返回对象是真实对象而不是代理.

所以,两种方法都不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读