私は基底クラスItem
と、Item
を継承する子クラスBall
を持っています。C#多態性コンストラクタ
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
オブジェクトを取り込んでいます。 ItemData
からわずかのようなBall
とItem
、BallData
継承:今
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ファイルから直列化解除されたもの)でもあるかどうかはわかりません。
new Item(itemDataObj)
は基本的に、私は私のコンストラクタがチェーンを形成したい:私は何をしたいだけItemData
オブジェクトであるItem
itemDataObj
場合itemDataObj
もBallData
オブジェクトである場合は、次のコードは、Ball
オブジェクトを作成しており、作成され(多形性)のものであり、適切なものがItemData
のそれぞれのタイプに対して選択される。
コンストラクタは多型ではありません。特定のシリアライズライブラリ/フレームワークやファクトリリーダーメソッドによって提供される "デシリアライゼーション"コードは、*正しい*コンストラクタを呼び出す責任があります。 – user2864740
@ user2864740ああ、ありがとう。それはあまりにも悪いです。 – BlueberryKing
多形のコンストラクタは意味をなさない。これは、オブジェクトの具体的な型を知る必要があるときです。この場合、 'new ball'を作成します。ボールコンストラクターは基本クラスコンストラクターを呼び出すか、ボールアイテムを – zzxyz