繁体   English   中英

C#多态构造函数

[英]C# Polymorphic constructor

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

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对象。 就像BallItemBallData继承自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)

基本上,我希望我的构造函数形成一个责任链(多态),其中为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();

分别得到我的ItemBall

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM