3反射基本使用二(不加载程序集)
反射基本使用
反射使用基本就是两个方面使用:
要么就是通过一个类来当作反射类型Type,然后根据Type的方法拿到类里面的成员。
要么就是直接用一个类的实例对象当作反射类型Type,然后根据Type的方法拿到里面的成员。
但是,调用该类的方法的话,就必须要用一个该类的实例来调用了,可以通过反射创建该类的实例,然后进行调用。
使用
假如有一个类的实例
UserInfo user = new UserInfo();
用反射拿到指定属性和设置属性值
1、根据类的类型来访问属性类型
Type type = typeof(UserInfo).GetProperty("SubCount");
2、根据该类的实例来获取该实例的属性
var prop = user.GetType().GetProperty("SubCount");
如果要获得属性的类型,在后面加PropertyType属性即可,如:
var prop2 = user.GetType().GetProperty("SubCount").PropertyType;
用反射获取类的指定方法并且调用
1、通过对象实例获取对象的方法
私有方法在GetMethod第一个参数后面加 BindingFlags.NonPublic | BindingFlags.Instance
var method= user.GetType().GetMethod("Hello");
调用
user.GetType().GetMethod("Hello").Invoke(new UserInfo(), null);
Invoke里的参数:第一个参数,该对象的实例(必要),第二个参数:对象里的方法的参数,有的话格式如下:new object[] { "张三" },没有的话就写null
2、通过类的类型获取方法
Type type = typeof(UserInfo);
var method = type.GetMethod("Hello");
调用
object user1 = Activator.CreateInstance(type);//创建一个UserInfo实例
PropertyInfo prop = type.GetProperty("UserName");//获取指定属性
//SetValue();第一个参数,要设置该属性的对象实例,第二个参数,值
prop.SetValue(user1,"李四"); //设置属性值,读取指定对象的属性值用getvalue
method.Invoke(user1, null);//用创建的实例调用
用反射获取泛型方法并且调用泛型方法
Type type = typeof(UserInfo);
PropertyInfo prop = type.GetProperty("UserName");//获取指定属性
var method = typeof(UserInfo).GetMethod("Test");
//给泛型类型
method = method.MakeGenericMethod(prop.PropertyType);
//调用
method.Invoke(new UserInfo(), null);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构