我正在使用Activator.CreateInstance在我的项目中构建对象.
我注意到,根据您调用的CreateInstance的重载,您可以获得所请求的对象或 ObjectHandle.
我注意到,根据您调用的CreateInstance的重载,您可以获得所请求的对象或 ObjectHandle.
为什么是这样?这对我来说似乎非常违反直觉.
public static Object CreateInstance( Type type ) public static ObjectHandle CreateInstance( string assemblyName,string typeName )
解决方法
的情况下
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)方法的返回对象是真实对象而不是代理.
所以,两种方法都不同.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。