反射和特性


什么是元数据,什么是反射
  程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BCL中的类)
这些也是数据。(BCL-Basic Class Lib基础类库)
有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中。
程序在运行时,可以查看其它程序集或其本身的元数据。一个运行的程序查看本身的元数据
或者其他程序集的元数据的行为叫做反射。

Type类
预定义类型(int long和string等),BCL中的类型(Console,IEnumerable等)和程序员自定义
类型(MyClass,.MyDe|等)。每种类型都有自己的成员和特性。
BCL声明了一个叫做Type的抽象类,它被设计用来包含类型的特性。使用这个类的对象能让
我们获取程序使用的类型的信息。
由于Type是抽象类,因此不能利用它去实例化对象。关于Type的重要事项如下:
对于程序中用到的每一个类型,CLR都会创建一个包含这个类型信息的Tye类型的
对象。
程序中用到的每一个类型都会关联到独立的Type类的对象。
不管创建的类型有多少个示例,只有一个TyPe对象会关联到所有这些实例。

 

Assembly类
Assemb ly类在System.Reflection命名空间中定义,它允许访问给定程序集的元数据,它也
包含了可以加载和执行程序集。
如何加载程序集?
1,Assembly assembly1=Assembly.Load("SomeAssemb ly");根据程序集的名字加载程序
集,它会在本地目录和全局程序集缓存目录查找将合名字的程序集。

2,Assembly assembly2 Assembly.LoadFrom(@"c:\xx\xx\xx\SomeAssembly.dII")//
的参数是程序集的完整路径名,它不会在其他位置搜索。
Assemb ly对象的使用
1,获取程序集的全名string name=assembly1.Ful IName;
2,遍历程序集中定义的类型
Type [types theAssembly.GetTypes();
foreach(Type definedType in types){
/1
}
3,遍历程序集中定义的所有特性(稍后介绍)

什么是特性?
特性(attribute)是一种允许我们向程序的程序集增加元数据的语言结构。它是用于保存程
序结构信息的某种特殊类型的类。
将应用了特性的程序结构叫做目标
设计用来获取和使用元数据的程序(对象浏览器)叫做特性的消费者
,ET预定了很多特性,我们也可以声明自定义特性

posted @ 2022-09-14 22:01  曲琦  阅读(14)  评论(0编辑  收藏  举报