反射的初步应用

先描述下需求

我遇到的问题是这样的,我们的无线设备有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给属性赋值,原来在这里的一些计算全部放到后面赋值完成的时候,最后算是比较完美的解决这个问题。

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

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

反射的初步应用的相关文章

2017年8月27日 反射的初步认识

反射原理主要是为了做框架用的,但是了解底层原理对以后深入理解框架概念还是蛮有帮助的. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着

关于反射的初步介绍

声明:本文最初是本人写在51CTO的一篇学习笔记,原文地址:http://kestrelsaga.blog.51cto.com/3015222/612118 反射的作用: 1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型: 2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射: 3. 反射主要应用于类库,这些类库需要知道一个类型的定义,以便提供更多的功能. 应用要点: 1. 现实应用程序中很少有应用程序需要使用反射类

Dapper简单实用和反射的初步尝试

方便测试,创建Console项目,将SqlMapper.cs文件添加到项目中 所有内容我都写在Program.cs文件中 首先做好准备工作,定义连接字符串.打开数据库连接方法.实体类.查询方法. // 定义连接字符串 static private readonly string sqlconnection = "Data Source=192.168.1.10;Initial Catalog=Test;User Id=sa;Password=sa;"; // 打开数据库连接 stati

在c++中实现反射的初步想法

最近在思考如何在c++中实现反射.事情的起因是这样的:我们服务器是用c++开发的,如果需要写一些测试用的GM指令的话,需要编写完GM代码后重新编译并且重启进程,工序繁琐且比较耗时.因此就有了想用脚本(lua或py)来写GM的想法.用脚本来做这事我觉得还挺适合的.首先可以免去编译.重启(通过脚本的reload)的过程.其次测试用的GM没有高性能的需求,并且一般在进行自测的阶段时,代码往往是频繁改动的,刚好适合用灵活的脚本:P 接下来的问题就是,要如何在项目中引入脚本.考虑到使用场景,我觉得这个脚本

java_ _反射

Java语言的反射机制初步学习 首先看下基本概念: (一)在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制. Java 反射机制主要提供了以下功能: ①:在运行时判断任意一个对象所属的类.       ②:在运行时构造任意一个类的对象.          ③:在运行时判断任意一个类所具有的成员变量和方法.     

反射demo(拷贝一个对象)

经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多. 上次学习的链接,有一些反射用的基础语句.https://www.cnblogs.com/deepSleeping/p/9381785.html package deep.blob.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import j

坦克大战(版本2.5-版本2.9)

版本2.5 功能:添加“血块”步骤:        1)添加blood类        2)添加必要的方法:eat方法等        3)让blood对象固定轨迹运动, 并在一定时间后消失 具体代码实现: 新增的blood类: 1 import java.awt.Color; 2 import java.awt.Graphics; 3 import java.awt.Rectangle; 4 5 //模拟血块,坦克吃了可以补血 6 public class Blood { 7 int x, y

黑马程序员-----object 类和包装类

/*** @author Administrator** @description Object类学习测试类* @history*/public class ObjectTestDemo {/***@description*@param args* @throws ClassNotFoundException*/public static void main(String[] args) throws ClassNotFoundException {// Object类学习测试代码// 1. t

Java反射-初步入门

Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 上面提到了类和对象,先了解什么是类和对象. java中类: 1.抽象描述 类:类是客观存在的.抽象的.概念东西. 对象:对象是具体的,指一个具体的东西. 打比方:饮料是一个类,可乐.雪碧就是对象. 总结一句话:类是对象的模版,对象