C# 反射详解
1.反射:反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中的每一个类型(包括类,结构,委托,接口和枚举)的成员和成员信息。
2.特点:(1)减少代码量。(2)降低程序之间的耦合性,使框架更加合理。
3.用途:
(1)使用Assembly定义和加载程序集,加载在程序集清单中的列出模块,以及从此程序集中查找类型并创建该类型的实例。
(2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)使用ConstructorInfo了解构造函数的名称,参数,访问修饰符(如public或者private)和现实详细信息(abstract或者virtual)。
(4)使用MethodInfo了解方法的名称,返回类型,参数,访问修饰符。
(5)使用FieldInfo了解字段的名称,访问修饰符和现实详细信息。
(6)使用EventInfo了解事件的名称,事件处理程序类型,自定义属性,声明类型和反射类型等,添加或移除事件处理程序。
(7)使用PropertyInfo了解属性的名称,数据类型,声明类型,反射类型和只读或可写状态等,获取或设置属性值。
(8)使用ParameterInfo了解参数的名称,数据类型,是输入参数还是输出参数,以及参数在方法签名的位置等。
4.反射使用的命名空间
(1)System.Reflection (2)System.Type (3)System.Reflection.Assembly
5.获取给定类型的Type引用有3种常用方式
(1)使用C#typeof运算符
Type t = typeoff(string);
(2)使用对象GetType()方法
string s = "sfsffgr";
(3)调用Type类的静态方法GetType()
Type t = Type.GetType("System.String");
6.获取类中所有公有字段的例子:
namespace text { class Program { static void Main(string[] args) { Type type = typeof(Person); //获取Person类中的公有字段 FieldInfo[] fis = type.GetFields(); foreach (var temp in fis) { Console.WriteLine(temp); } //获取Person类中的公有属性 PropertyInfo[] proInfo = type.GetProperties(); foreach (var temp in proInfo) { Console.WriteLine(temp); } //获取Person类中的构造函数 ConstructorInfo[] conInfo = type.GetConstructors(); foreach (var temp in conInfo) { Console.WriteLine(temp); //获取构造函数的所以参数 ParameterInfo[] parInfo = temp.GetParameters(); foreach (var item in parInfo) { Console.WriteLine(item); } } //获取Person类中的所有方法 MethodInfo[] methodInfo = type.GetMethods(); foreach (var temp in methodInfo) { Console.WriteLine(temp); } //根据指定的参数列表获取对应的构造函数 Type[] paramType = new Type[2]; paramType[0] = typeof(string); paramType[1] = typeof(int); ConstructorInfo con = type.GetConstructor(paramType); Console.WriteLine(temp); //创建类的实例 object[] obj = new object[] { "123", 123 }; object person = con.Invoke(obj); ((Person)person).Show(); Console.ReadKey(); } } public class Person { public string str; public int num; public string Name { get; set; } public int Age { get; set; } public Person() { Console.WriteLine("No Parameter Consturctor"); } public Person(string _str, int _num) { str = _str; num = _num; Console.WriteLine("Have Parameter Constur ctor"); } } }
原文地址:https://www.dongchuanmin.com/csharp/3368.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!