Допустим, я делаю основной класс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()
). Как-то приватное смотрелось бы лучше.
Какие-либо предложения? Спасибо.