哪个大哥帮忙解释下这段代码什么意思?原理是什么?
Activator.CreateInstance(Commom.GetCachenamespace, Commom.GetCacheclassName).Unwrap();
这个从头讲起来要先了解Marshal,也是.net中跨域中很重要的一环。
里面主要包含两种Marshal by value(mbv),Marshal by reference(mbr)
第一种你会用的比较多,打了Serializable后就具有这种特性,最常见的场景就是远程调用中传输的对象信息,序列化到域外的数据(和实际)
mbr这个其实也会有很多地方涉及,很老的remoting技术到wcf中你可以远程调用一个对象的方法,而实际方法体是在另一个服务中执行后再返回到调用端来。比如wcf中根据元数据创建的服务端代理(透明代理,让你感觉这个对象就在本地一样)调用远程相同对象的方法。
回过头来说的你的方法Activator#CreateInstance和ObjectHandle#Upwarp,前面这个你自己去查下就好了,反射中创建一个对象比较基础的方式。后面一个就涉及到mbv了,因为Activator#CreateInstance并不能确定你就在同一个appdomain下,那么这里只能返回出来一个对象的代理,你想要拿到实际对象当然必须要展开获取其实际对象了。
参考文档https://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx
动态创建一个实例。代码的意思是
通过字符串创建类实例,并调用了Unwarp方法(鬼知道这个函数什么意思,你们自己私有的函数)
请在.net framework的帮助文档找 找 反射 这一节