C#反射通过Type对象获取成员并操作,GetProperties()查属性,GetValue/SetValue读写值,GetMethod+Invoke调方法,需注意BindingFlags、类型匹配、安全性和性能优化。

在C#中,反射(Reflection)是运行时获取类型信息、动态创建对象、调用方法和访问属性的核心机制。要获取属性或动态调用方法,关键在于先拿到 Type 对象,再通过它查询成员并操作。
获取类的所有公共属性
使用 GetProperties() 方法可列出所有公共实例属性(默认不包括私有、静态或继承的属性):
- 若需包含私有属性,加
BindingFlags.NonPublic | BindingFlags.Instance - 若需包含基类属性,加
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly(去掉DeclaredOnly才含继承的) - 示例:var props = typeof(Person).GetProperties(); —— 返回
PropertyInfo[]
通过反射读写属性值
拿到 PropertyInfo 后,用 GetValue() 和 SetValue() 操作具体对象的属性:
-
GetValue(obj):传入目标实例,返回属性值(注意处理 null 或值类型装箱) -
SetValue(obj, value):第二个参数需与属性类型匹配,否则抛异常 - 对只读属性调用
SetValue会失败;私有属性需确保 BindingFlags 已启用NonPublic - 示例:string name = (string)prop.GetValue(person);
动态调用方法(含参数和返回值)
用 GetMethod() 查找方法,再用 Invoke() 执行:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~