0

0

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

月夜之吻

月夜之吻

发布时间:2025-12-16 12:58:03

|

682人浏览过

|

来源于php中文网

原创

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

Tellers AI
Tellers AI

Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

下载
  • 查找方法支持重载:可指定参数类型数组,如 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 → 成员查询 → 实例操作 这条主线,就能稳住大部分反射需求。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

232

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

437

2024.03.01

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

542

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2023.11.23

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.2万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 13.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号