我遇到的情况是我需要将基类的成员复制到派生类。 我有一个基类实例,它由一些其他服务返回,我们用作进一步类的基类的同一个类。
当我们创建派生类的对象时,我想将已创建的基类实例分配给派生类,我知道我们不能将基类对象分配给派生类,但我仍在搜索任何其他解决方案。 任何人有任何想法吗?
示例:
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;
答案 0 :(得分:1)
以天真的方式是不可能的。
我想建议定义构造函数或静态方法。我个人不建议使用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;}
}
答案 1 :(得分:0)
如果您的类是轻量级的,并且不会随时更改,那么您可以在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;
我在这里创建了一个dotnetfiddle: