メジャー クラスを作成する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()
)。どういうわけかプライベートが良く見えるでしょう。
助言がありますか?ありがとうございました。