私はよく理解していれば、何を終わりにしたいと、このようなものになるだろう:基本クラスのコンストラクタを呼び出すことはできませんとして継承を使用してのあなたの計画は、このように動作しません
Card planetCard = new Card("Planet");
Card fateCard = new Card("Fate");
継承したクラスを独自のコストラクターから削除します。それは逆にしか起こりえない。
1-必要に応じてプロッパクラスをインスタンス化します。。次のようになりました(一種のあなたが最初の場所で実現したかったものと同様である)カードを作成することができます
public class PlanetCard : Card
{
///--- Attributes of planet here
public PlanetCard() : base("Planet"){}
}
public class FateCard : Card
{
///--- Attributes of fate here
public FateCard() : base("Fate"){}
}
:
Card planetCard = new PlanetCard();
Card fateCard = new FateCard();
このような2つのクラスを考えると
2-継承の代わりにコンポーネントを使用する。
継承の代わりにコンポーネントを使用することは、今日ゲームでは非常に一般的です。アイデアは、1枚のカードだけクラスを持つが、各カード、それが本当に何であるかに応じて、使用する別のコンポーネント必要がありますされています
interface IComponent{}
public class PlanetComponent : IComponent
{
///--- Attributes of Planet
}
public class FateComponent : IComponent
{
///--- Attributes of Fate
}
public class Card
{
List<IComponent> components;
public Card(string cardName)
{
///--- Fill components according to the name
}
public T GetComponent<T>()
{
///--- return the component of the type T in the list, or null
}
}
をそして今、あなたは後で使用していますが、最初の場所(のようにカードを作成することができます)少し異なるものになります:それはあなたが(あなたが望んでいた場合は、両方のコンポーネントで「FatePlanet」カードを持っているclud)の意志でコンポーネントを組み合わせることができますよう
Card planetCard = new Card("Planet");
Card fateCard = new Card("Fate");
///--- Using the planet card
PlanetComponent planetComp=planetCard.GetComponent<PlanetComponent>();
if (planetComp!=null)
{
///--- you can use here the planet attributes
}
このソリューションは、はるかに柔軟です。あなたはそれが必要なコンポーネントとカードの名前を一致させる何らかの方法が必要です。
希望すると助かります!
コンストラクタと同じパラメータを持ち、正しい種類のカードの新しいインスタンスを吐き出す 'public CardFactory(....')メソッド – spender
ああ、あなたは、どのコンストラクタを – NoSoup4you
はい、あなたは正しいです。それは単に 'Card'を返すメソッドであり、それを使って、新しいインスタンスを使用して返します。 – spender