Некоторые проблемы с частными абстрактными методами

Допустим, я делаю основной классCar-и я хочу, чтобы этот класс был абстрактным. Абстрактный, потому что это мой основной класс, никто не должен создавать объект этого класса. Этот класс должен быть там только как "основной".

Я хочу, чтобы классы можно было создавать только из подклассовCar(допустим Мерседес, Феррари... ). Поскольку у каждой машины должны быть такие методы, как StartEngine, я поместил ее в основной класс. Допустим, у меня есть это:

abstract class Car
{
  public string Name { get; set; }

  public abstract void StartEngine();
  private abstract bool CheckGasoline();
  //and so on...
}

class Mercedes : Car
{
  private override bool CheckGasoline()
  {
  //somehow check gasoline and return whatever...
  }

  public override void StartEngine()
  {
    if (CheckGasoline())
      //start engine...
  }
}

Ну, это не сработает. Из-за частной аннотации:

virtual or abstract members cannot be private

Так плохо делать каждый частный метод защищенным:

abstract class Car
{
  public string Name { get; set; }

  public abstract void StartEngine();
  protected abstract bool CheckGasoline();
  //and so on...
}

class Mercedes : Car
{
  protected override bool CheckGasoline()
  {
  //somehow check gasoline and return whatever...
  }

  public override void StartEngine()
  {
    if (CheckGasoline())
      //start engine...
  }
}

Это нормально? Я имею в виду, что это работает, но так ли это должно быть? Использование protected, когда мне просто нужен метод в том же классе (, как здесь:CheckGasoline()нужен только дляStartEngine()). Как-то приватное смотрелось бы лучше.

Какие-либо предложения? Спасибо.

10
задан Blorgbeard 12 August 2012 в 21:31
поделиться