C#怎么使用反射获取属性 C# Reflection动态调用方法

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

c#怎么使用反射获取属性 c# reflection动态调用方法

在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() 执行:

查找方法支持重载:可指定参数类型数组,如 type.GetMethod(“Calculate”, new[] { typeof(int), typeof(string) }) Invoke(obj, args) 中,objnull 表示调用静态方法;args 是 object[],null 参数需显式写 null 泛型方法需先用 MakeGenericMethod() 构造封闭类型,再 Invoke 无返回值方法(void)调用后返回 null

安全与性能提醒

反射灵活但有代价:

每次反射调用都绕过编译期检查,错误在运行时报出,建议配合 try/catch 或提前验证 频繁调用时性能较差,可缓存 PropertyInfoMethodInfo,或用 Delegate.CreateDelegate 转为强类型委托提升速度 .NET Core/.NET 5+ 中,System.Reflection.Emit 或表达式树(Expression.Lambda)适合高频场景

基本上就这些。掌握 Type → 成员查询 → 实例操作 这条主线,就能稳住大部分反射需求。

以上就是C#怎么使用反射获取属性 C# Reflection动态调用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:51:21
下一篇 2025年12月17日 19:51:31

相关推荐

发表回复

登录后才能评论
关注微信