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



我有两个类:

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 =(ExtendenDobject(对象;

通过语言设计,您不能将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; }
}

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

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

例如。

class extendedObject : object 
{
        int quantity { get; set; }
        string moreDetail{ get; set; }
     public extendedObject(object myObject)
     {
         id = myObject.id.
         /// etc.
     }
}

P.S。如有例如AutoMapper等可以使您更轻松,但我不建议这样做,从长远来看,这只是我的经验。

直接铸件不适合。您必须将课程声明为派生类:

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; }
}

最新更新