如何使用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;

如何使用c#.net将基类实例复制到派生类基

以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