一、反射
1、什么是反射
-
了解反射之前,要先了解一下元数据。元数据指保存在程序集中的一些有关程序及其类型的数据,包括类、结构、委托、接口和枚举等)的成员和成员的信息。
-
程序在运行时,可以查看程序集以及其本身的元数据,是反射。
-
通过反射,可以在运行时获取程序或程序集中的所有类型的元数据。
-
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。(来源:菜鸟教程)
-
反射的命名空间是System.Reflection。
具体内容:
.NET 中的反射
2、反射的优缺点
首先在编译中分为动态编译和静态编译,静态编译是在编译中确定类型,绑定对象,而动态编译是在运行中确定类型,绑定对象
反射的优点就是可以动态创建对象、绑定对象,提高了程序的灵活性和扩展性,但反射是一种解释操作,在性能上不如静态编译快
3、 反射(Reflection)的用途
反射(Reflection)有下列用途:
- 它允许在运行时查看特性(attribute)信息。
- 它允许审查集合中的各种类型,以及实例化这些类型。
- 它允许延迟绑定的方法和属性(property)。
- 它允许在运行时创建新类型,然后使用这些类型执行一些任务。
4、Type 类
通过反射类的Type,来获取有关构造函数、方法、字段、属性和事件的信息。
Type 是抽象类。在运行时,CLR 创建从 Type(RuntimeType)派生的类的实例,Type 包含了类型信息。当访问这些实例时,CLR 不会返回派生类的引用而是返回 Type 基类的引用。
如声明了一个 MyClass 类型,不管创建了多少个 MyClass 类型的实例,就只有一个 Type 对象表示它。即每一个类型对应一个 Type 类型的对象。
表-System.Type 类的部分成员
成员 | 成员类型 | 描述 |
---|---|---|
Name | 属性 | 返回类型的名字 |
Namespace | 属性 | 返回包含类型声明的命名空间 |
Assembly | 属性 | 返回声明类型的程序集。如果类型是泛型的,返回定义这个类型的程序集 |
GetFields | 方法 | 返回类型的字段列表 |
GetProperties | 方法 | 返回类型的属性列表 |
GetMethods | 方法 | 返回类型的方法列表 |
1)获取 Type 对象
通过 object 对象 来获取 Type 对象。文章来源:https://www.toymoban.com/news/detail-492715.html
Type t = myInstance.GetType():
示例:文章来源地址https://www.toymoban.com/news/detail-492715.html
class BaseClass
{
public int BaseField = 0;
}
class DerivedClass: BaseClass
{
public int DerivedField = 0;
}
class Program
{
static void Main(string[] args)
{
var bc = new BaseClass
到了这里,关于(十二)反射与特性 -反射与预定义特性(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!