.net - 使反射成为可能的 C# 语言的特性是什么?

标签 .net oop reflection interpreted-language

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

最佳答案

编译器非常了解您编写的程序。它知道您编写的每个类、方法的名称以及它们采用的参数。传统上,编译器在为您的程序生成可执行代码后,会丢弃有关您的程序的额外信息。

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

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

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

关于.net - 使反射成为可能的 C# 语言的特性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426771/

相关文章:

c++ - 我们如何确定函数应该包含在哪个类中

c++ - 有没有更好的方法来编写这个 C++ 代码

php - ReflectionProperty::setAccessible 是否使该属性永远可访问?

Java反射,对象有什么类?

java - 确定类的扩展接口(interface)

c# - 使用 Entity Framework Code First 创建文本列

c# - 如果子类调用覆盖成员,则阻止/生成警告

c# - HttpContext 抛出 HttpException

asp.net - 间歇性 ASP.Net 状态服务错误

mysql - Entity Framework (MySQL) - 使用两个 dbcontext 将数据从一个数据库移动到另一个数据库