?// 簡單介紹
// 元數據(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()*/}}}