码迷,mamicode.com
首页 > 其他好文 > 详细

反射的初步应用

时间:2015-06-15 18:11:32      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

先描述下需求

 我遇到的问题是这样的,我们的无线设备有8个模拟端口,每个端口都对应不同的数据,可以使温度,湿度,光照强度等,这个端口与数据的关系不是绑定的,在之前的解决方案中,每次新项目都要根据现场的情况修改代码,太麻烦了,刚好最近学到反射就决定用这个来解决问题。

首先我在配置文件中写出对应关系

   <add key="ADC0" value="temp"/>
    <add key="ADC1" value="airhumi"/>
    <add key="ADC2" value="soiltemp"/>
    <add key="ADC3" value="soilhumi"/>
    <add key="ADC4" value="wenddir"/>
    <add key="ADC5" value="Tlightrue"/>
    <add key="ADC6" value="lighwt"/>
    <add key="ADC7" value="light"/>

  每个key对应代码中数据类的属性 可以在这里修改配置。

                            case "ADC0":
                                data.GetType().GetField(Config.ADC0).SetValue(data, GetValue(strs[i + 1]));
                                break;
                            case "ADC1":
                                data.GetType().GetField(Config.ADC1).SetValue(data, GetValue(strs[i + 1]));
                                break;
                            case "ADC2":
                                data.GetType().GetField(Config.ADC2).SetValue(data, GetValue(strs[i + 1]));
                                break;
                            case "ADC3":
                                data.GetType().GetField(Config.ADC3).SetValue(data, GetValue(strs[i + 1]));
                                break;
                            case "ADC4":
                                data.GetType().GetField(Config.ADC4).SetValue(data, GetValue(strs[i + 1]));
                                break;

  这一部分就是根据对应关系来给数据接收类赋值,这里面的Confgi类是静态读取配置文件的,通过

data.GetType().GetField()找到数据类中的属性,再通过SetValue给属性赋值,原来在这里的一些计算全部放到后面赋值完成的时候,最后算是比较完美的解决这个问题。


小结:
这样写可能会带来一点点效率上损失,但是可以极大的提高代码的复用性,就算以后端口变多了也只需要做很小的修改

实践才是学习最重要的一部分,看书和视频的时候对反射的概念一直很模糊,直到在实践中思考和实现的时候才基本理解了这部分的内容。

反射的初步应用

标签:

原文地址:http://www.cnblogs.com/NEAVERS/p/4578575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!