如何使用c#.net

时间:2016-10-04 12:51:19

标签: c#

我遇到的情况是我需要将基类的成员复制到派生类。 我有一个基类实例,它由一些其他服务返回,我们用作进一步类的基类的同一个类。

当我们创建派生类的对象时,我想将已创建的基类实例分配给派生类,我知道我们不能将基类对象分配给派生类,但我仍在搜索任何其他解决方案。 任何人有任何想法吗?

示例:

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;

2 个答案:

答案 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:

dotnetfiddle for this question