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 才含继承的)PropertyInfo[]
拿到 PropertyInfo 后,用 GetValue() 和 SetValue() 操作具体对象的属性:
GetValue(obj):传入目标实例,返回属性值(注意处理 null 或值类型装箱)SetValue(obj, value):第二个参数需与属性类型匹配,否则抛异常SetValue 会失败;私有属性需确保 BindingFlags 已启用 NonPublic
用 GetMethod() 查找方法,再用 Invoke() 执行:
Invoke(obj, args) 中,obj 为 null 表示调用静态方法;args 是 object[],null 参数需显式写 null
MakeGenericMethod() 构造封闭类型,再 Invokenull
反射灵活但有代价:
try/catch 或提前验证PropertyInfo 或 MethodInfo,或用 Delegate.CreateDelegate 转为强类型委托提升速度System.Reflection.Emit 或表达式树(Expression.Lambda)适合高频场景基本上就这些。掌握 Type → 成员查询 → 实例操作 这条主线,就能稳住大部分反射需求。
以上就是C#怎么使用反射获取属性 C# Reflection动态调用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号