C#反射使用方法过程及步骤是怎样的
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,C#反射使用方法过程及步骤是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。示例:1. 根据窗口类的名称,产生一个新
千家信息网最后更新 2026年11月02日C#反射使用方法过程及步骤是怎样的示例:
C#反射使用方法过程及步骤是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
示例:
1. 根据窗口类的名称,产生一个新的窗口,相当于new 窗口类
//1. 定义窗口类名称:(窗口类的字符串名字,需要全路径名,否则获取不到TYPE) string customClassName = @"IBAutoDeal.IBDealForms." + hasPanel.Text; //2. 获取字符串customClassName(某个窗口类的字符串名字)指定类的TypeType customClassType = Type.GetType(customClassName); //3. 生成指定Type的实例,相当于new 类 object customClassObj = Activator.CreateInstance(customClassType); // 4. 对新生成的类进行操作, 本例把new 出的窗口赋值给一个窗口变量 panelForm = customClassObj as Form; // 由此达到使用类的字符串名生成一个该类的实例供后续程序的使用
2. 根据类的字符串名字,给该类的字段或属性赋值
//反射功能使用及步骤:以下示例为给字符串类名生成一个实例,并给该类的属性或字段赋值 // 1. 定义类名称:(类的字符串名字,需要全路径名,否则获取不到TYPE)string customVaribleName = @"IBAutoDeal.IBDealClass.CommVar"; // 2. 获取字符串 customVaribleName指定类的TypeType customVaribleType = Type.GetType(customVaribleName); // 3. 生成指定Type的实例,相当于new 类 object customAaribleObj = Activator.CreateInstance(customVaribleType); // 4. 获取该类字段,本例是给一个公共的窗体变量赋值,而该变量在此是字段// 如果是给该类的属性赋值,就需要使用 PropertyInfo pi = customVaribleType.GetField("v" + hasPanel.Text)// 在该类中,某个域是属性还是字段呢?我个人的判断是,若该域提供了GET,SET方法,就为属性,否则为字段,也不知道正确否?FieldInfo pi = customVaribleType.GetField("v" + hasPanel.Text); // 5. 给该字段赋值,该字段是个窗口类变量,customClassObj就是示例1中根据字符串产生的窗口类pi.SetValue(customAaribleObj, customClassObj); // 通过以上5个步骤,完成了根据字符串的名字,给相应类的字段赋值3. 根据类的字符串名字,读取字段值,并使用该字段值(示例中,该字段值是窗体,该示例是销毁该窗体)
// 1. 定义类名称:(类的字符串名字,需要全路径名,否则获取不到TYPE)string customVaribleName = @"IBAutoDeal.IBDealClass.CommVar"; // 2. 获取字符串 customVaribleName指定类的TypeType customVaribleType = Type.GetType(customVaribleName); // 3. 生成指定Type的实例,相当于new 类 object customAaribleObj = Activator.CreateInstance(customVaribleType); // 4. 获取该类字段,本例是给一个公共的窗体变量赋值,而该变量在此是字段// 如果是给该类的属性赋值,就需要使用 PropertyInfo pi = customVaribleType.GetField("v" + hasPanel.Text)// 在该类中,某个域是属性还是字段呢?我个人的判断是,若该域提供了GET,SET方法,就为属性,否则为字段,也不知道正确否?FieldInfo pi = customVaribleType.GetField("v" + e.Panel.Name); // 5. 读取该字段的值(本示例该字段值为窗体,读取窗体变量,把销毁该窗体) (pi.GetValue(customAaribleObj) as Form).Dispose(); // 6. 再为该字段赋空值pi.SetValue(customAaribleObj, null);4. 示例3原来是通过switch来判断需要关闭那个窗口,这样就会有很多的case语句,通过反射,就用示例3的6行代码取代了,下面贴出原程序的代码,目的是让大家了解反射的作用:
// 被示例3取代的原代码段(根据e.Panel.Name的值对相应窗口关闭,并给公用变量赋值)switch (e.Panel.Name) { case "FrmAccountStatistics": CommVar.vFrmAccountStatistics.Dispose(); CommVar.vFrmAccountStatistics = null; break; case "frmPositionManager": CommVar.vfrmPositionManager.Dispose(); CommVar.vfrmPositionManager = null; break; case "frmTrader": CommVar.vfrmTrader.Dispose(); CommVar.vfrmTrader = null; break; case "frmLog": CommVar.vfrmLog.Dispose(); CommVar.vfrmLog = null; break; case "frmDataTransPlant": CommVar.vfrmDataTransPlate.Dispose(); CommVar.vfrmDataTransPlate = null; break; case "frmAccountTJ": CommVar.vfrmAccountTJ.Dispose(); CommVar.vfrmAccountTJ = null; break; case "frmGridViewConfig": CommVar.vfrmGridViewConfig.Dispose(); CommVar.vfrmGridViewConfig = null; break; case "frmTaticlistExcel": CommVar.vfrmTaticlistExcel.Dispose(); CommVar.vfrmTaticlistExcel = null; break; case "frmQuoteLst": CommVar.vfrmQuoteLst.Dispose(); CommVar.vfrmQuoteLst = null; break; case "frmProduct": CommVar.vfrmProduct.Dispose(); CommVar.vfrmProduct = null; break; default: break; }5. 针对 T 的泛类型定义的类,给属性赋值示例代码如下:
public static T ReadClass(string pClassName) where T:class { //1. 定义类名称:(因为有传入的T类,所以不需要类的名称了) //2.获取类T的TYPE,注意,前面例子中是通过字符串取类型,使用的是Type.GetType() Type classType = typeof(T); //3. 生成指定 T 的实例,前面例子中,我们使用的是Activator.CreateInstance(classType) T ClassObj = Activator.CreateInstance (); //4. 定义类的属性变量,因程序要多次读取不同的属性,在此定义一个局部变量 PropertyInfo classPropertyInfo = null; string tableName = "TradeParameters"; //DataTable必须转成DataView才能使用RowFilter DataTable vDt = DataTableHelper.ReadTable(tableName); DataView vDv = vDt.DefaultView; vDv.RowFilter = $"ClassName = '{pClassName}'"; if (vDv.Count > 0) { string pName, pVaule; foreach(DataRow dr in vDv) { pName = dr["AttributeName"].ToString(); pVaule = dr["AttributeValue"].ToString(); //5. 获取指定名称属性 classPropertyInfo = classType.GetProperty(pName); if (classPropertyInfo != null) { //6. 给指定属性赋值 classPropertyInfo.SetValue(ClassObj, pVaule); } } } return ClassObj;}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
字段
字符
字符串
属性
变量
示例
名字
窗体
实例
生成
类名
反射
代码
方法
步骤
名称
程序
路径
路径名
个人
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技保险
鸠鸠互联网科技
互联网科技有限公司图片
北京互联网科技公司
狮子座互联网科技有限公司
睿民互联网科技
广西拼得多互联网科技有限公司
卫星互联网科技股票
北京三清互联网科技
江苏南京365互联网科技
小米互联网科技园设置
互联网科技项目计划书材料类
燊美集互联网科技有限公司
互联网科技创新的路径
产业互联网科技服务公司
美国互联网科技公司
西安左小互联网科技有限公司
互联网科技创新创业项目
数字科技和互联网金融哪个好
互联网 科技节活动 微视频大赛
互联网科技公司简介
互联网科技股票
互联网科技排名
互联网科技小额贷款
四川狮子座互联网科技
剑昆互联网络科技有限公司临桂
互联网新科技动漫ppt素材
无锡工业互联网科技有限公司
美国五大互联网科技公司市值多少
重庆科技产业互联网有哪些