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; } } }