发布时间:2026-10-03 04:49:18 浏览次数:0
下面是针对“C#中的反射(System.Reflection)”的完整攻略。
反射是一种在运行时获取类型信息和操作对象的方法。它允许程序在运行时发现和调用在编译时未知的类型、方法和属性。利用反射,您可以:
反射在许多场合被使用,如:
要在C#中使用一些反射功能,需要导入System.Reflection命名空间。下面是几个基本应用实例。
获取一个对象的类型信息:
object obj = new object();Type t = obj.GetType();获取一个类型的实例:
Type t = typeof(string);这里演示通过反射获取和操作一些类成员
public class Person { public string Name {get;set;} private int age; public int GetAge() {return age;}}Type t = typeof(Person);PropertyInfo pinfo = t.GetProperty("Name");MethodInfo minfo = t.GetMethod("GetAge");Console.WriteLine(pinfo.PropertyType);Console.WriteLine(pinfo.GetValue(personObj));Console.WriteLine(minfo.Invoke(personObj, null));使用反射可以创建任何类型的实例,甚至是动态创建类型:
Type t = Type.GetType("System.String");object obj = Activator.CreateInstance(t, new object[] { "hello" });Type t2 = typeof(Person);object personObj = Activator.CreateInstance(t2);PropertyInfo pinfo = t2.GetProperty("Name");pinfo.SetValue(personObj, "Lucy");可以通过 MethodInfo 的 Invoke 方法动态调用任何方法:
Type t = typeof(Math);MethodInfo minfo = t.GetMethod("Abs", new Type[]{typeof(int)});int result = (int) minfo.Invoke(null, new object[]{ -5 });这里使用反射调用Math的静态方法 Abs。
反射是C#中很有用的特性,允许程序在运行时获取类型信息和操作对象。反射广泛应用于插件、ORM、调试器等许多领域。在使用反射时,需要使用 System.Reflection 命名空间和一些基本的反射类型,如 Type、MethodInfo 等,只有理解了这些反射内容,才能更好地掌握反射技术的高级应用。