反射
反射可以取得一个程序集有哪些类
也可以取得一个类有哪些属性,方法,字段等
定义一个基本类
class MyClass
{
private int id;
private int age;
public int number;
public string Name { get; set; }
public string Name1 { get; set; }
public string Name2 { get; set; }
public string Name3 { get; set; }
public void Test1() { }
public void Test2() { }
}
获取类的各种参数
//每一个类对应一个type对象
//type对象存储了这个类有哪些方法,哪些数据,哪些成员
MyClass my = new MyClass();//一个类中的数据 是存储到对象中的,但是type对象只存储类的成员(方法,字段)
Type type = my.GetType();//通过对象获取这个对象所属类的type对象
//获取类的名字
Console.WriteLine(type.Name);
//获取所在的命名空间
Console.WriteLine(type.Namespace);
//返回类所在的程序集
Console.WriteLine(type.Assembly);
//获取类的公有字段
FieldInfo[] array = type.GetFields();//注:只能获取共有字段
foreach (FieldInfo info in array)
{
Console.Write(info.Name + " ");
}
Console.WriteLine();
//获取类的所有属性
PropertyInfo[] arrayProperty = type.GetProperties();//去除所有的属性
foreach(PropertyInfo info in arrayProperty)
{
Console.Write(info.Name + " ");
}
Console.WriteLine();
//获取类的所有方法
MethodInfo[] arrayMethod = type.GetMethods();
foreach (MethodInfo info in arrayMethod)
{
Console.Write(info.Name + " ");
}
Console.WriteLine();
获取该类所在的程序集以及程序集中所有的类
MyClass my1 = new MyClass();
Assembly assem = my1.GetType().Assembly;//通过类的type对象获取所在的程序集
Console.WriteLine(assem.FullName);
Type[] types = assem.GetTypes();
foreach(var temp in types)
{
Console.Write(temp.Name + " ");//获得所有的类名称
}