首页 新闻 会员 周边

项目里有一段获取缓存的代码,看不懂请帮忙看下

0
悬赏园豆:10 [已解决问题] 解决于 2019-09-25 15:40

哪个大哥帮忙解释下这段代码什么意思?原理是什么?

Activator.CreateInstance(Commom.GetCachenamespace, Commom.GetCacheclassName).Unwrap();

荆棘人的主页 荆棘人 | 菜鸟二级 | 园豆:410
提问于:2017-06-13 11:26
< >
分享
最佳答案
1

这个从头讲起来要先了解Marshal,也是.net中跨域中很重要的一环。

里面主要包含两种Marshal by value(mbv),Marshal by reference(mbr)

第一种你会用的比较多,打了Serializable后就具有这种特性,最常见的场景就是远程调用中传输的对象信息,序列化到域外的数据(和实际)

mbr这个其实也会有很多地方涉及,很老的remoting技术到wcf中你可以远程调用一个对象的方法,而实际方法体是在另一个服务中执行后再返回到调用端来。比如wcf中根据元数据创建的服务端代理(透明代理,让你感觉这个对象就在本地一样)调用远程相同对象的方法。

回过头来说的你的方法Activator#CreateInstance和ObjectHandle#Upwarp,前面这个你自己去查下就好了,反射中创建一个对象比较基础的方式。后面一个就涉及到mbv了,因为Activator#CreateInstance并不能确定你就在同一个appdomain下,那么这里只能返回出来一个对象的代理,你想要拿到实际对象当然必须要展开获取其实际对象了。

收获园豆:7
Daniel Cai | 专家六级 |园豆:10424 | 2017-06-14 12:26
其他回答(4)
0

参考文档https://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx

收获园豆:1
ycyzharry | 园豆:25651 (高人七级) | 2017-06-13 11:52
0

动态创建一个实例。代码的意思是

收获园豆:1
czd890 | 园豆:14412 (专家六级) | 2017-06-13 12:27
0

通过字符串创建类实例,并调用了Unwarp方法(鬼知道这个函数什么意思,你们自己私有的函数)

花飘水流兮 | 园豆:13560 (专家六级) | 2017-06-14 10:26
0

请在.net framework的帮助文档找 找 反射 这一节

收获园豆:1
西漠以西 | 园豆:1675 (小虾三级) | 2017-06-14 15:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册