如何使用c#.net将基类实例复制到派生类基
本文关键字:复制 派生 实例 基类 何使用 net | 更新日期: 2023-09-27 18:11:38
我遇到了一种情况,我需要将基类的成员复制到派生类。我有一个基类的实例,它是由其他服务返回的,这个类是我们用作其他类的基类的同一个类。
当我们创建一个派生类的对象时,我想将已经创建的基类实例分配给派生类,我知道我们不能将基类对象分配给派生类,但我仍在寻找任何其他解决方案。有人知道吗?
的例子:
public class VBase
{
public string Type {get;set;}
public string Colour {get;set;}
}
public class Car : VBase
{
public string Name {get;set;}
public int Year {get;set;}
}
//这个类实例是从其他源获取的
VBase mBase= new VBase();
mBase.Type = "SUV";
mBase.Colour = "Black";
//-------------------------------------------------------
Car myCar= new Car();
myCar.Name = "AUDI";
mBase.Year = "2016";
//这里我想把基类的实例复制到派生类,像这样或者其他任何可能的方式。
myCar.base=mBase;
以naïve的方式是不可能的。
我建议定义构造函数或静态方法。我个人不建议使用像AutoMapper这样的额外库来完成这项工作,因为它们可能需要一些转换,并且使代码变得繁琐。
public class Car : VBase
{
// Method 1: define constructor.
public class Car(VBase v) {
this.Type = v.Type;
this.Colour = v.Colour;
}
// Method 2: static method.
public static Car FromVBase(VBase v){
return new Car()
{
this.Type = v.Type;
this.Colour = v.Colour;
};
}
public string Name {get;set;}
public int Year {get;set;}
}
不使用反射,如果你的类是轻量级的,并且不会随着时间的推移而改变,那么你可以在Car
:中创建一个公共属性Base
public class Car : VBase
{
public string Name
{
get;
set;
}
public int Year
{
get;
set;
}
public VBase Base
{
set
{
base.Type = value.Type;
base.Colour = value.Colour;
}
}
}
然后可以像这样轻松地传递基类:
myCar.Base = mBase;
我在这里创建了一个。netfiddle:
dotnetfiddle for this question