[英]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;
}
}
它们的构造函数接受ItemData
或BallData
对象。 就像Ball
和Item
, 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)
基本上,我希望我的构造函数形成一个责任链(多态),其中为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
或Ball
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.