using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace 基於System.Type的反射 { class Program { static void Main(string[] args) { //1.使用GetType() 反射類型 string a = "Hello world."; Type t = a.GetType(); Console.WriteLine(t.FullName); //2.使用Type.GetType() 反射類型 Type t1 = Type.GetType("System.String", false, true); Console.WriteLine(t1.FullName); //3.使用typeof獲取類型 Type t2 = typeof(string); Console.WriteLine(t2.FullName); //通過方法獲取對象的方法 GetMethods(t, BindingFlags.Public | BindingFlags.Instance); // Console.WriteLine("join Methods:{0}",t.GetMethod("Copy")); // Console.WriteLine("-----------------------------------------------------------"); // //知識點補充:抽象類不能實例化 #region 動態加載程序集 // //動態加載.net2.0所有程序集,並獲取所有類型 Assembly objAssembly; objAssembly = Assembly.Load("mscorlib,2.0.0.0,Neutral,b77a5c5619934e089"); Type[] types = objAssembly.GetTypes(); foreach (var t3 in types) { Console.WriteLine(t3.Name); } //獲取當前執行的程序集 objAssembly = Assembly.GetExecutingAssembly(); //檢查對象(基於System.Type的反射.car) Type t4 = objAssembly.GetType("基於System.Type的反射.car", false, true); //創建一個當前對象的實例 object obj = Activator.CreateInstance(t4); //獲取當前對象中存在的方法 MethodInfo mi = t4.GetMethod("IsMoveing"); //判斷當前對象是否存在指定的方法 obj指實例化對象,null指IsMoveing()的參數 var ismoving = (bool)mi.Invoke(obj, null); if(ismoving) { Console.WriteLine("Yes"); } else { Console.WriteLine("NO"); } #endregion Console.ReadLine(); } /// <summary> /// 獲取對象的所有方法 GetProperty()獲取所有屬性 GetFields()獲取所有字段 /// </summary> /// <param name="t"></param> public static void GetMethods(Type t,BindingFlags f) { MethodInfo[] mi = t.GetMethods(f); foreach (MethodInfo item in mi) { Console.WriteLine("{0}",item.Name); } } } class car { public bool IsMoveing() { return true; } } }