反射-Type类
- 什么是元数据,什么是反射
- 程序是用来处理数据的,文本和特性都是数据,而程序本身(类的定义和BLC中的类)这些也都是数据
- 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中
- 程序在运行时,可以查看其他程序集或其本身的元数据。一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射
- Type类
- 预定义类型(int long 和string等),BCL中的类型(Console,IEnumerable等)和自定义类型(MyClass,MyDel等)。每种类型都有自己的成员和特性
- BCL声明了一个叫做Type的抽象类,它被设计用来包含类型的特性。使用这个类的对象能够让我们获取程序使用的类型的信息
- 由于Type是抽象类,因此不能利用它去实例化对象
- 关于Type的重要事项如下:
- 对于程序中用到的每一个类型,CLR都会创建一个包含这个类型信息的Type类型的对象
- 程序中用到的每一个类型都会关联到独立的Type类的对象
- 不管创建的类型有多少个示例,只有一个Type对象会关联到所有这些实例
实例:
MyClass类
namespace _034_反射和特性Type类
{
class MyClass
{
public int id;
public int age;
public string Name1 {
get; set; }
public string Name2 {
get; set; }
public void Test1() {
}
public void Test2() {
}
}
}
Main方法
using System.Reflection; //添加命名空间
class Program
{
static void Main(string[] args)
{
//每一个类对应一个Type对象,这个Type对象包含了这个类的方法,成员等
//对象包含着所属类各个成员具体的值,Type对象只包含这些成员(不包含具体值)
MyClass myClass = new MyClass() ;
Type type = myClass.GetType(); //通过对象获取到这个对象所属类的Type对象
Console.WriteLine(type.Name); //类的名字
Console.WriteLine(type.Namespace); //所在命名空间
Console.WriteLine(type.Assembly); //所在程序集
//需要添加命名空间
FieldInfo[] array = type