手机
当前位置:查字典教程网 >编程开发 >C#教程 >基于反射解决类复制的实现方法
基于反射解决类复制的实现方法
摘要:假定一个类,类名是EtyBase,另一个类类名是EtyTwo,EtyTwo继承自EtyBase。现在要求EtyTwo的属性值从一个EtyBa...

假定一个类,类名是EtyBase,另一个类类名是EtyTwo,EtyTwo继承自EtyBase。现在要求EtyTwo的属性值从一个EtyBase中复制过来传统做法是

复制代码 代码如下:

View Code

public void CopyEty(EtyBase from, EtyBase to)

{

to.AccStatus = from.AccStatus;

to.Alarm = from.Alarm;

to.AlarmType = from.AlarmType;

to.CarNum = from.CarNum;

to.DevNum = from.DevNum;

to.DeviceNum = from.DeviceNum;

to.Direct = from.Direct;

to.DriveCode = from.DriveCode;

to.GpsData = from.GpsData;

to.GpsEnvent = from.GpsEnvent;

to.GpsOdo = from.GpsOdo;

to.GpsSpeed = from.GpsSpeed;

to.GpsStatus = from.GpsStatus;

to.GpsrevTime = from.GpsrevTime;

to.Gsmci = from.Gsmci;

to.Gsmci1 = from.Gsmci1;

to.Gsmloc = from.Gsmloc;

to.Gsmloc1 = from.Gsmloc1;

to.IsEffective = from.IsEffective;

to.IsJump = from.IsJump;

to.IsReply = from.IsReply;

to.Latitude = from.Latitude;

to.LaunchStatus = from.LaunchStatus;

to.Longitude = from.Longitude;

to.MsgContent = from.MsgContent;

to.MsgExId = from.MsgExId;

to.MsgId = from.MsgId;

to.MsgLength = from.MsgLength;

to.MsgType = from.MsgType;

to.NowOverArea = from.NowOverArea;

to.NowStatus = from.NowStatus;

to.Oil = from.Oil;

to.PulseCount = from.PulseCount;

to.PulseOdo = from.PulseOdo;

to.PulseSpeed = from.PulseSpeed;

to.ReplyContent = from.ReplyContent;

to.RevMsg = from.RevMsg;

to.Speed = from.Speed;

to.Status = from.Status;

to.Temperture = from.Temperture;

to.UserName = from.UserName;

}

这样子做有几点不好的地方

EtyBase的属性改变时复制的属性也得改变,耦合较高;

若EtyBase的属性比较多,那么这个复制方法将显得比较冗长,写的人手累。

如果用反射来做,我是这么做的

复制代码 代码如下:

View Code

public void CopyEty(EtyBase from, EtyBase to)

{

//利用反射获得类成员

FieldInfo[] fieldFroms = from.GetType().GetFields();

FieldInfo[] fieldTos = to.GetType().GetFields();

int lenTo = fieldTos.Length;

for (int i = 0, l = fieldFroms.Length; i < l; i++)

{

for (int j = 0; j < lenTo; j++)

{

if (fieldTos[j].Name != fieldFroms[i].Name) continue;

fieldTos[j].SetValue(to, fieldFroms[i].GetValue(from));

break;

}

}

}

反射可以解决上述的两个缺点,当类属性改变或增加时,此复制方法无需改变。当然这是要付出些许运行效率的。

【基于反射解决类复制的实现方法】相关文章:

C# 获取打印机当前状态的方法

关于C#生成MongoDB中ObjectId的实现方法

C#对XML文件的各种操作实现方法

c# 托盘双击不触发单击事件的实现方法

WinForm子窗体访问父窗体控件的实现方法

获取wince mac地址与IP地址解决方案

c# 共享状态的文件读写实现代码

C#中Web.Config加密与解密的方法

用C#实现启动另一程序的方法实例

C# dynamic关键字的使用方法

精品推荐
分类导航