上端调用下端的实例
1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Linq; 5 using System.Reflection; 6 using System.Text; 7 8 namespace 反射 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 15 #region 多构造函数 破坏单例,创建泛型 16 //创建多构造函数 17 { 18 string typeObj = ConfigurationManager.AppSettings["data"]; 19 20 Type type = Assembly.Load("反射").GetType(typeObj); 21 22 object stu1 = Activator.CreateInstance(type); 23 24 //type后面的参数表示该反射类型的构造函数的参数,参数必须一一对应写入才能找到相应的构造函数 25 object stu2 = Activator.CreateInstance(type, 857); 26 object stu3 = Activator.CreateInstance(type, "张三"); 27 object stu4 = Activator.CreateInstance(type, 123, "李四"); 28 } 29 30 //反射黑科技,破坏单例 31 { 32 string stuObj= ConfigurationManager.AppSettings["singleton"]; 33 Type type = Assembly.Load("反射").GetType(stuObj); 34 35 //反射可以让单例创建多次,增加true即可 36 object obj1 = Activator.CreateInstance(type, true); 37 object obj2 = Activator.CreateInstance(type, true); 38 object obj3 = Activator.CreateInstance(type, true); 39 object obj4 = Activator.CreateInstance(type, true); 40 } 41 42 //泛型类反射 43 { 44 string typeObj = ConfigurationManager.AppSettings["fanxing"]; 45 Type type = Assembly.Load("反射").GetType(typeObj).MakeGenericType(typeof(int),typeof(string),typeof(bool)); 46 object obj = Activator.CreateInstance(type); 47 } 48 Console.ReadLine(); 49 #endregion 50 51 #region 发射调用实例方法,静态方法,重载方法 52 { 53 string stuObj = ConfigurationManager.AppSettings["data"]; 54 Type type = Assembly.Load("反射").GetType(stuObj); 55 object obj = Activator.CreateInstance(type); 56 foreach (var item in type.GetMethods()) 57 { 58 Console.WriteLine(item.Name); 59 } 60 { 61 MethodInfo method = type.GetMethod("Study"); //调用Student对象中的Study()方法 62 method.Invoke(obj, new object[] {"大爷"}); //开始调用,obj为该类型对象,后面为Study()方法的参数 63 } 64 { 65 //重载 66 MethodInfo method = type.GetMethod("Show"); 67 method.Invoke(obj,null); 68 } 69 { 70 //重载2 71 MethodInfo method = type.GetMethod("Show",new Type[] { typeof(string)}); //new Type[] { typeof(string),typeof(...),...} 表示参数类型 72 method.Invoke(obj,new object[] {"小兵"}); //添加实际参数 73 } 74 75 } 76 #endregion 77 78 /* 79 <appSettings> 80 <add key="data" value="反射.Student"/> 81 <add key="singleton" value="反射.StuSingleton"/> 82 <add key="fanxing" value="反射.People`3"/> //注意这里People类中有三个泛型,要用占位符 `3 来表示 83 </appSettings> 84 */ 85 } 86 } 87 }
下面是几个类的实例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 反射 7 { 8 class People<T, U, X> 9 { 10 11 } 12 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 反射 7 { 8 class Student 9 { 10 private int id; 11 private string name; 12 public Student() 13 { 14 15 } 16 public Student(int id) 17 { 18 this.id = id; 19 } 20 public Student(string name) 21 { 22 this.name = name; 23 } 24 public Student(int id,string name) 25 { 26 this.id = id; 27 this.name = name; 28 } 29 public void Show() 30 { 31 Console.WriteLine("这是一个学生"); 32 } 33 34 public void Show(string name) 35 { 36 this.name = name; 37 Console.WriteLine("这个学生是{0}",name); 38 } 39 public static void Study() 40 { 41 Console.WriteLine("这是一个爱学习的学生"); 42 } 43 } 44 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 反射 7 { 8 class StuSingleton 9 { 10 private static StuSingleton _instance = null; 11 private StuSingleton() 12 { 13 Console.WriteLine("创建单例模式"); 14 } 15 static StuSingleton() 16 { 17 _instance = new StuSingleton(); 18 } 19 public static StuSingleton Instance 20 { 21 get 22 { 23 return _instance; 24 } 25 } 26 } 27 }