0

オブジェクトの構築中に、いくつかのパラメーターを初期化する必要があります。例として

Vehicle (color)
     I
Car (transmission type, air conditioning (boolean))
     I
Cabriolet (roof (boolean))

また、いつでもすべてのパラメーターを使用できる必要がありReloadます (私のパラメーターは実際には変更可能であるため)。このクラスパラメーターvirtual ReloadParameters()を呼び出してロードする各クラスのメソッドを作成することを考えていました。super

問題は、構築中にすべてのパラメーターをロードする必要もあり、コンストラクターから仮想メソッドを呼び出したくないということです。これは悪い習慣だからです。

何を提案しますか?

4

1 に答える 1

0

コンストラクターで仮想メソッドを呼び出さないようにするには、非仮想プライベートメソッドを作成し、コンストラクターと仮想メソッドの両方から呼び出します。

class Vehicle
{
    public Vehicle()
    {
        LoadVehicleParameters();
    }
    virtual void ReloadParameters()
    {
        LoadVehicleParameters();
    }
    private void LoadVehicleParameters();
    {
         //logic here.
    }
}
class Car : Vehicle
{
    public Car() // call to base constructor is implicit
    {
        LoadCarParameters();
    }
    virtual void ReloadParameters()
    {
        base.ReloadParameters();
        LoadCarParameters();
    }
    private void LoadCarParameters();
    {
         //logic here.
    }
}

基本クラスにパラメーターなしのコンストラクターがない場合、または複数のコンストラクターがある場合は、もちろん、次のように、呼び出す基本コンストラクターを指定する必要があります。

public Car(int i) : base(i)
//...
于 2012-06-10T16:03:41.457 に答える