C#学习教程:通用C#复制构造函数分享


通用C#复制构造函数

为c#类编写通用复制构造函数的最佳方法是什么? 它们都从一个抽象基类inheritance,所以我可以使用reflection来映射属性,但我想知道是否有更好的方法?

您可以通过预编译来有效地创建浅层副本,例如使用Expression 。 例如, 像这样 。

对于深层拷贝,序列化是最可靠的方法。

复制构造函数基本上意味着您有一个参数,即您要复制的对象。

另外,做一个深拷贝,而不是浅拷贝。

如果您不知道深层和浅层副本是什么,那么这是交易:

假设您正在复制一个具有单行整数的类作为字段。

浅拷贝将是:

 public class Myclass() { private int[] row; public MyClass(MyClass class) { this.row = class.row } } 

深拷贝是:

 public class Myclass() { private int[] row; public MyClass(MyClass class) { for(int i = 0; i 

深拷贝确实获得了实际值并将它们放在新对象的新字段中,而浅拷贝只复制指针。

使用浅拷贝,如果设置:

 row[3] = 5; 

然后打印两行,两个打印将具有5作为第四个数字的值。 但是,使用深层复制时,只有第一个打印才会有这个,因为行没有相同的指针。

如果可以的话,避免反思。 每个类都应该负责复制自己的属性,并将其进一步发送到基本方法。

这是我正在使用的构造函数。 请注意,由于我的基类的性质,这是一个浅构造函数,而且相当简单。 应该足够好,让你开始。

 public partial class LocationView : Location { public LocationView() {} // base class copy constructor public LocationView(Location value) { Type t = typeof(Location); PropertyInfo[] properties = t.GetProperties(); foreach (PropertyInfo pi in properties) { pi.SetValue(this, pi.GetValue(value, null), null); } } public Quote Quote { get; set; } } 

您可以参考valueinjecter和quickflect nuget包并使用:

上述就是C#学习教程:通用C#复制构造函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---猴子技术宅(www.ssfiction.com)

 public class Myclass() { private string _property; public MyClass(MyClass obj) { this.InjectFrom(obj.DeepClone()); } } 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1252557.html

(0)
上一篇 2022年11月15日 下午2:40
下一篇 2022年11月15日 下午2:42

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注