C#多态构造函数

问题描述 投票:1回答:1

我有一个基类Item和一个继承自Ball的子类Item

public class Item
{
    public string Name { get; set; }
    public uint ID { get; set; }

    public Item(ItemData data)
    {
        Name = data.Name;
        ID = data.ID;
    }
}

public class Ball : Item
{
    public float Radius { get; set; }

    public Ball(BallData data) : base(data)
    {
        CatchRate = data.Radius;
    }
}

他们的构造函数接受ItemDataBallData对象。就像BallItem一样,BallData继承自ItemData

public class ItemData
{
    public string Name { get; set; }
    public uint ID { get; set; }
}

public class BallData : ItemData
{
    public float Radius { get; set; }
}

现在,我有一个ItemData对象itemDataObj。请注意,我不知道这是否也是一个BallData对象(反序列化和XML文件)。我想要做的是如果Ball也是一个itemDataObj对象,下面的代码创建一个BallData对象,如果Item只是一个itemDataObj对象,则创建一个ItemData

new Item(itemDataObj)

基本上,我希望我的构造函数形成一个责任链(多态),其中为相应类型的qazxsw poi选择适当的一个。

c# constructor polymorphism
1个回答
1
投票

我实际上通过实现ItemData方法设法找到这个特定情况的解决方案:

GetItem()

这样我可以这样做:

public class ItemData
{
    public string Name { get; set; }
    public uint ID { get; set; }

    public virtual Item GetItem()
    {
        return new Item(this);
    }
}

public class BallData : ItemData
{
    public float Radius { get; set; }

    public override Item GetItem()
    {
        return new Ball(this);
    }
}

分别得到我的itemDataObj.GetItem(); Item

© www.soinside.com 2019 - 2024. All rights reserved.