C# 反射 Reflection 进阶
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
反射是C#编程中的一个重要特性,它允许程序在运行时获取和操作对象的信息,而无需事先创建对象或者指定对象的具体实现。通过反射,程序可以动态地创建、获取、修改和删除对象,从而实现更加灵活和强大的编程能力。 反射的实现依赖于程序运行时的环境,其中包括.NET框架中的类型信息和字段、方法、属性等信息。在C#中,程序可以通过System.Reflection命名空间中的类和接口来访问和操作这些信息。例如,使用Type类可以获取指定类型的类名、方法名、字段名等信息;使用MethodInfo类可以获取指定方法的方法名、参数类型、返回值类型等信息;使用FieldInfo类可以获取指定字段的字段名、数据类型、访问权限等信息。 正文通过Type创建一个类的实例 做一个基础类Machine public class Machine { public string Name { get; set; } public string Location { get; set; } public decimal Amount = 1; public Machine() { } public Machine(string name, string location) { Name = name; Location = location; } public bool Run() { MessageBox.Show(this.Name+" "+"Run" + DateTime.Now.ToString()); return true; } public void Stop() { MessageBox.Show(this.Name + " " + "Stop" + DateTime.Now.ToString()); } } 实例化这个类 private void btnCreateClass_Click(object sender, EventArgs e) { Type t = Type.GetType("s77.Machine"); //构造器的参数 object[] args = new object[] { "设备2", "北京", 9000 }; //创建对象 object obj =Activator.CreateInstance(t,new object[] {"设备2","北京"}); //获取方法的信息 MethodInfo method = t.GetMethod("Run"); //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值 BindingFlags flag = BindingFlags.Public | BindingFlags.Instance; method.Invoke(obj,new object[] { }); } 动态创建一个委托 调整一个Machine 类 delegate string DeleStatus(string name); public class Machine { public string Name { get; set; } public string Location { get; set; } public decimal Amount = 1; public Machine() { } public Machine(string name, string location) { Name = name; Location = location; } public bool Run() { MessageBox.Show(this.Name+" "+"Run" + DateTime.Now.ToString()); return true; } public void Stop() { MessageBox.Show(this.Name + " " + "Stop" + DateTime.Now.ToString()); } public string Status(string name) { return name+" OK"; } }
private void btnCreateDelegate_Click(object sender, EventArgs e){ Type t = Type.GetType("s77.DeleStatus");//取得委托Type DeleStatus method = (DeleStatus)Delegate.CreateDelegate(t, machine, "Status");//创建委托 string ret = method("设备"); MessageBox.Show(ret);} 该文章在 2024/3/30 23:56:16 编辑过 |
关键字查询
相关文章
正在查询... |