// 简单介绍
// 元数据(metadata):与程序及其类型有关的数据。
// 反射:一个运行的程序查看本身元数据或其他程序集中的元数据的行为
// Assembly类:允许访问给定程序集的元数据,包含了可以加载和执行程序集
// 定义一个用于访问的类MyClass
class MyClass{private int a, b;public int c;public string d;public string Name1 { get; set; }public string Name2 { get; set; }public void Test1() { }public void Test2() { }}
// 主函数调用
class Program{static void Main(string[] args){// 使用Type类可以反射数据// 定义// 方案一Type t1 = typeof(MyClass);// 方案二MyClass myclass = new MyClass();Type t2 = myclass.GetType();// 获取类名Console.WriteLine(t1.Name); // MyClassConsole.WriteLine(t2.Name); // MyClass// 获取空间名Console.WriteLine(t1.Namespace); // TypeAndAssemblyConsole.WriteLine(t2.Namespace); // TypeAndAssembly// 获取程序集的基本信息 (空间名,版本,文化,公共钥匙符号)Console.WriteLine(t1.Assembly); // TypeAndAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullConsole.WriteLine(t2.Assembly); // TypeAndAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null// 提取MyClass的字段的属性FieldInfo[] fis = t1.GetFields();foreach (FieldInfo fi in fis){Console.WriteLine(fi.Name); //c//d}// 提取MyClass的属性的 get 访问器。PropertyInfo[] pis = t2.GetProperties();foreach (PropertyInfo pi in pis){Console.WriteLine(pi); // System.String Name1// System.String Name2}// 提取Myclass的类函数(包含继承自父类的)MethodInfo[] mis = t2.GetMethods();foreach (MethodInfo mi in mis){Console.WriteLine(mi);/*System.String get_Name1()Void set_Name1(System.String)System.String get_Name2()Void set_Name2(System.String)Void Test1()Void Test2()Boolean Equals(System.Object)Int32 GetHashCode()System.Type GetType()System.String ToString()*/}}}