lom*_*axx 18 c# constructor copy
为c#类编写通用复制构造函数的最佳方法是什么?它们都从一个抽象基类继承,所以我可以使用反射来映射属性,但我想知道是否有更好的方法?
Vor*_*ler 23
复制构造函数基本上意味着您有一个参数,这是您要复制的对象.
另外,做一个深拷贝,而不是浅拷贝.
如果您不知道深层和浅层副本是什么,那么这是交易:
假设您正在复制一个具有单行整数的类作为字段.
浅拷贝将是:
public class Myclass()
{
private int[] row;
public MyClass(MyClass class)
{
this.row = class.row
}
}
Run Code Online (Sandbox Code Playgroud)
深拷贝是:
public class Myclass()
{
private int[] row;
public MyClass(MyClass class)
{
for(int i = 0; i<class.row.Length;i++)
{
this.row[i] = class.row[i];
}
}
}
Run Code Online (Sandbox Code Playgroud)
深拷贝确实获取了实际值并将它们放在新对象的新字段中,而浅拷贝只复制指针.
使用浅拷贝,如果你设置:
row[3] = 5;
Run Code Online (Sandbox Code Playgroud)
然后打印两行,两个打印将有5作为第四个数字的值.但是,使用深层复制时,只有第一个打印才会有这个,因为行没有相同的指针.
Øyv*_*aar 19
如果可以的话,避免反思.每个类都应该负责复制自己的属性,并将其进一步发送到基本方法.
这是我正在使用的构造函数.请注意,由于我的基类的性质,这是一个浅构造函数,而且相当简单.应该足够好,让你开始.
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; }
}
Run Code Online (Sandbox Code Playgroud)