反射:指程序可以访问、检测和修改它本身状态或行为的一种能力;
通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。
例如有一个学生类Student,包含有字段,属性及方法
1 class Student 2 { 3 public Student(string name, int age, bool isboy) 4 { 5 this.name = name; 6 this.age = age; 7 this.isBoy = isboy; 8 } 9 public string name; 10 public int grade = 3; 11 public int age; 12 public bool isBoy { get; set; } 13 public void Learn1(string work) { Console.WriteLine("I'm Working1 Now:" + work); } 14 public void Learn2(string work) { Console.WriteLine("I'm Working2 Now:" + work); } 15 public void Learn3(string work) { Console.WriteLine("I'm Working3 Now:" + work); } 16 }Student
下面使用反射来对其进行各种操作,首先引入命名空间:
using System.Reflection;
使用反射实例化一个对象:
//Student stu = new Student("Frankie", 10, true); Student stu = (Student)Activator.CreateInstance(typeof(Student), new[] { "Frankie", (object)10, (object)true });
使用反射获取Student类中都有哪些成员:
1 static void GetAll(object sender) 2 { 3 Console.WriteLine("/*******获取对象中所有字段属性方法及值********/"); 4 Type t = sender.GetType(); 5 PropertyInfo[] pros = t.GetProperties(); 6 FieldInfo[] fies = t.GetFields(); 7 MethodInfo[] meths = t.GetMethods(); 8 foreach (var v in pros) 9 Console.WriteLine("属性:" + v.Name + ":" + v.GetValue(sender)); 10 foreach (var v in fies) 11 Console.WriteLine("字段:" + v.Name + ":" + v.GetValue(sender)); 12 foreach (var v in meths) 13 Console.WriteLine("方法:" + v.Name); 14 }GetAll()
使用反射对stu对象中的字段和属性进行修改,并执行它的方法
1 static void Modify(object sender) 2 { 3 Console.WriteLine("/*******修改对象的所有字段属性值并调用方法********/"); 4 Type t = sender.GetType(); 5 PropertyInfo p = t.GetProperty("isBoy"); 6 p.SetValue(sender, false); 7 FieldInfo f = t.GetField("name"); 8 f.SetValue(sender, "jeny"); 9 f = t.GetField("grade"); 10 f.SetValue(sender, 8); 11 f = t.GetField("age"); 12 f.SetValue(sender, 15); 13 for (int i = 1; i < 4; i++) 14 { 15 MethodInfo m = t.GetMethod("Learn" + i); 16 m.Invoke(sender, new[] { i.ToString() }); 17 } 18 }Modify()
反射可以对每一个未知对象了如指掌且可以对其进行修改和方法调用。很有用!很强大!
标签:反射,Console,sender,WriteLine,示例,C#,work,Student,public From: https://www.cnblogs.com/cfsl/p/17035078.html