2

私は 1 つの基本クラスから継承するいくつかのクラスの構築に取り組んできましたが、この段階では継承とポリモーフィズムが C# でどのように機能するかについて完全には確信が持てません。

私の基本クラスは次のようになります。

abstract class Structure
    {
        public int currentCost = 0;
        public int currentArea = 0;
        public int currentPopulation = 0;
        public int currentConstruction = 0;
        public int currentEnergy = 0;
        public int currentEconomy = 0;

        public abstract int baseCost { get; }
        public abstract int baseEnergy { get; }
        public abstract int baseEconomy { get; }
        public abstract int baseConstruction { get; }
        public int baseArea = -1;
        public int basePopulation = -1;

        public int level = 0;
        public abstract string structureName { get; }
}

ここで、クラスから継承するStructureクラスは、抽象変数に独自の割り当てを提供するように作成されます。これは、ほとんどのクラスが割り当てる数値が大幅に異なるため、問題ありません。抽象変数は、次の (不完全な) 方法で派生クラスで使用されます。

class BiosphereModification : Structure
    {
        const int baseEconomyBiosphereModification = 0;
        const int baseConstructionBiosphereModification = 0;
        const int baseCostBiosphereModification = 2000;
        const int baseEnergyBiosphereModification = 0;
        const int baseFertilityBiosphereModification = 1;
        const string structureNameBiosphereModification = "BiosphereModification";

        public override int baseCost { get { return baseCostBiosphereModification; } }
        public override int baseEconomy { get { return baseEconomyBiosphereModification; } }
        public override int baseEnergy { get { return baseEnergyBiosphereModification; } }
        public override int baseConstruction { get { return baseConstructionBiosphereModification; } }
}

ただし、非抽象変数はほとんどの派生クラスで同じですが、すべてではありません。

それらをすべて抽象化し、各クラスに独自の値を提供させることもできますが、これは直感に反するようです。私が好むのは、基本クラスで値を提供し、必要に応じて派生クラスでオーバーライドを提供する方法です。

これを行う方法はありますか?これは、宣言されたメソッドで実行できることを知っていますvirtual。これにより、派生クラスは、独自のメソッドを提供しない限り、基本クラスのメソッドを使用できます。確かにこれに似たものが存在しますか?

4

1 に答える 1

3

私が好むのは、基本クラスで値を提供し、必要に応じて派生クラスでオーバーライドを提供する方法です。

プロパティは virtual として宣言することもできます:

public virtual int BaseCost { get { return 0; } }
public virtual int BaseEnergy { get { return 42; } }
public virtual int BaseEconomy { get { return 3982; } }
public virtual int BaseConstruction { get { return 398829; } }

その後、必要に応じてそれらをオーバーライドできます。

public override int BaseCost { get { return 2; } }
于 2012-08-17T16:54:07.197 に答える