如何从一个对象分配数据,而该对象又继承了原始对象的另一种不同类型的对象?

时间:2019-05-21 10:24:01

标签: c#

我有两节课:

class object {
    int id{ get; set; }
    string name { get; set; }
    string description { get; set; }
}

class extendedObject : object {
        int quantity { get; set; }
        string moreDetail{ get; set; }
    }

我想将对象的属性分配给扩展对象。

例如,extendedObject =(extendedObject)object;

3 个答案:

答案 0 :(得分:1)

在您的示例中,您似乎正在尝试分配变量,而不是属性。这是不可能的,因为继承的类不能包含基类的变量。

如果您要具有一个extendedObject类型的单独对象并从该对象复制数据,那么恐怕您必须自己编写代码。使用复制构造函数或单独的方法。

例如

class extendedObject : object 
{
        int quantity { get; set; }
        string moreDetail{ get; set; }

     public extendedObject(object myObject)
     {
         id = myObject.id.
         /// etc.
     }

}

P.S。周围有各种各样的映射器(特殊库),例如AutoMapper等可以使您更轻松地完成此任务,但我不建议这样做,从长远来看,这样做会更加昂贵。

答案 1 :(得分:1)

通过语言设计,您无法将BaseObject投射到ExtendedObject

您甚至无法在它们之间定义implicitexplicit operator

这是一个可能的解决方法:

class Program
{
    static void Main(string[] args)
    {
        BaseObject baseObject = new BaseObject()
        {
           ID = 0,
           Name = "TEST",
           Description = "TEST"
        };
        ExtendedObject extendedObject = new ExtendedObject(baseObject);
    }
}

public class BaseObject
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class ExtendedObject : BaseObject
{
    public ExtendedObject(BaseObject baseObject)
    {
        this.ID = baseObject.ID;
        this.Name = baseObject.Name;
        this.Description = baseObject.Description;
    }
    public int Quantity { get; set; }
    public string MoreDetails { get; set; }
}

答案 2 :(得分:0)

直接投稿是不可能的。您必须将该类声明为派生类:

public class Program
{
    public static void Main()
    {
        BaseClass c = new ExtendedClass() { id= 2, name = "Jhon"};

        ExtendedClass extended = c as ExtendedClass;        
        Console.WriteLine(extended.name);
    }
}

public class BaseClass 
{
    public int id{ get; set; }
    public string name { get; set; }
    public string description { get; set; }
}

public class ExtendedClass : BaseClass 
{
    public int quantity { get; set; }
    public string moreDetail{ get; set; }
}