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 回答