zoukankan      html  css  js  c++  java
  • C# 反射总结

    1,根据字段名和具体对象,获取对象的属性的值

            /// <summary>
            /// 根据字段名和具体对象,获取对象的属性的值
            /// </summary>
            /// <param name="FieldName">字段名</param>
            /// <param name="obj">具体的对象</param>
            /// <returns></returns>
            public string GetModelValue(string FieldName, object obj)
            {
                try
                {
                    Type Ts = obj.GetType();
                    object o = Ts.GetProperty(FieldName).GetValue(obj, null);
                    string Value = Convert.ToString(o);
                    if (string.IsNullOrEmpty(Value)) return null;
                    return Value;
                }
                catch
                {
                    return null;
                }
            }
    

      应用代码

                        //根据input的值,检测IO输入是否有值
    
                        //if (this.txt_input.Text == "6")//不用反射的话,要写太多的代码啦。有DI_6,DI_5......
                        //{
                        //    if (Global.myAdam6250.DI_6 == "True")
                        //    {
                        //        Flag_Tighten_Done = true;
                        //    }
                        //}
    
                        string fieldName = "DI_" + this.txt_input.Text;
                        string strInputValue = GetModelValue(fieldName, Global.myAdam6250);//根据属性的名称字符串,获取属性值
                        if (strInputValue == "True")//如果有输入
                        {
                            Flag_Tighten_Done = true;//执行完成
                            if (IsSetOut == true)
                            {
                                GetAndExecuteMethod(frmMonitor, methodName, null);//改变输出的状态
                                IsSetOut = false;
                            }
                        }
    

      

    2,根据具体的对象和方法名,调用方法

            /// <summary>
            /// 根据具体的对象和方法名,调用方法
            /// </summary>
            /// <param name="objClass">对象</param>
            /// <param name="methodName">需要调用的方法名</param>
            /// <param name="parameters">传递的参数值</param>
            public void GetAndExecuteMethod(object objClass, string methodName, object[] parameters = null)
            {
                try
                {
                    Type t = objClass.GetType();
                    //获取对象的公共方法
                    MethodInfo mi = t.GetMethod(methodName);
                    //object objinstance = Activator.CreateInstance(t);//这里是调用另外一个已经打开的窗体的方法,所以不能在创建实例
                    //执行方法
                    mi.Invoke(objClass, parameters);
                }
                catch (Exception)
                {
                    throw;
                }
            }
    

      应用代码:

                        //给IO输出信号,取料灯点亮
                        string methodName = "SetOut_" + this.txt_output.Text;
                        if (StringHelper.IsInteger(this.txt_output.Text))//如果是数字
                        {
                            //frmMonitor.Out_4();//调用已经打开窗体的公共方法,不用反射的话只能写死方法
                            if (IsSetOut == false)
                            {
                                GetAndExecuteMethod(frmMonitor, methodName, null);//根据方法名,调用方法,frmMonitor是一个窗体的实例
                                IsSetOut = true;
                            }
                        }
    

      

      

  • 相关阅读:
    destoon自定义函数获取地区名称
    dt开发之-自定义函数获取分类名称
    dt二次开发之-地区链接伪静态标签用法
    DT二次开发之-采购页面加入好看的倒计时
    DT二次开发之-资讯列表中调用 TAG 关键词
    DT系统中tag如何使用like与%来进行模糊查询
    如何防护DDOS攻击策略
    织梦阿里云OSS解决方案
    漫画解读“跨视图粒度计算”,了解有数分析利器
    [译] 关于 SPA,你需要掌握的 4 层 (1)
  • 原文地址:https://www.cnblogs.com/baozi789654/p/13752273.html
Copyright © 2011-2022 走看看