首页 新闻 会员 周边

C# 如何实现特性的自动反射?

0
悬赏园豆:20 [已解决问题] 解决于 2020-07-03 20:30

C# 的特性是配合反射用的,平时我往往只是把特性当成附加标签的功能,而一些项目似乎有更高级的用法。

比如 Fody 旗下的诸多项目。添加了特性后,产生了魔法效果,我并没有看到对应的反射代码,那特性是如何起作用的呢?

CodingNinja的主页 CodingNinja | 初学一级 | 园豆:157
提问于:2020-04-17 12:41
< >
分享
最佳答案
1

Fody 不是什么反射哈,比反射还高级,是代码注入,相当于把IL改了。如果反射都能办到,我还用什么Fody。

收获园豆:20
花飘水流兮 | 专家六级 |园豆:13560 | 2020-04-22 20:19
其他回答(2)
1

除了反射,还有一种方式 emit

不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2020-04-17 13:59
2

Fody是好像通过扩展编译器实现的,在编译期反射并生成相关结果,可以认为是反射代码在Fody自身的编译器中。

拓拓 | 园豆:1050 (小虾三级) | 2020-04-17 17:35

Fody 通过 nuget 获得,我很好奇我 nuget 了后,是“谁”最先启动了相关代码?

支持(0) 反对(0) CodingNinja | 园豆:157 (初学一级) | 2020-04-17 22:08

@CodingNinja: 什么叫谁最先启动了相关代码,不太懂

以fody的 propertychanged库举例,早期版本安装之后会直接修改项目文件,这是修改编译流程,让他可以在编译的时候直接嵌入IL代码,编译完成之后如果你反编译的话就可以看到,反编译出来的代码跟你写的代码是不一样的,相当于他替你写了相关代码,而不是谁启动了相关代码

支持(1) 反对(0) 拓拓 | 园豆:1050 (小虾三级) | 2020-04-18 22:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册