使用反射成为可能的C#语言的属性是什么?

Bas*_*mme 4 .net oop reflection interpreted-language

使用反射成为可能的C#语言的属性是什么?它是所有面向对象语言都可以做的事情,还是所有解释语言都能做到的事情?或者是其他东西...

Han*_*ant 9

编译器对您编写的程序有很多了解.它知道你编写的每个类,方法的名称,它们所采用的参数.传统上,编译器在为程序生成可执行代码后,会将有关程序的额外信息抛弃.

它不是.NET编译器,它保留了这些信息.它存储在程序集的元数据中.除生成的代码之外的.NET .exe或.dll文件中的额外数据结构.通过运行时支持库中的管道来在运行时读取该数据结构,System.Type类是有用的.

这不是它结束的地方,您还可以向该元数据添加任意额外数据.这是[属性]的全部内容.

这可以实现各种非常有趣和有用的功能.就像动态改变代码在运行时生成的方式一样.或者在不知道其类名的情况下动态创建对象.或者将类型的视图从其实现转换为更容易处理的有用的其他表示.这反过来又启用了序列化和设计时支持等功能.反射是这背后的引擎,元数据是源头.