上級 › sealedメンバーをオーバーライドしようとした原因と直し方 › パターン2
sealedメンバーをオーバーライドしようとした原因と直し方
sealed overrideを付けたメンバーを、さらに下の派生クラスでオーバーライドしようとすると出るコンパイルエラーです。
1 class Vehicle { 2 public virtual void Accelerate() { System.Console.WriteLine("..."); } 3 public virtual void Brake() { System.Console.WriteLine("..."); } 4 } 5 class Car : Vehicle { 6 public sealed override void Accelerate() { System.Console.WriteLine("Vroom"); } 7 public override void Brake() { System.Console.WriteLine("Stop"); } 8 } 9 class SportsCar : Car { 10 public override void __________() { System.Console.WriteLine("Fast"); } ^ 11 } 12 class Program { 13 static void Main(string[] args) { 14 SportsCar s = new SportsCar(); 15 s.Accelerate(); 16 s.Brake(); 17 } 18 }
Program.cs(10,26): error CS0239: 'SportsCar.Accelerate()': cannot override inherited member 'Car.Accelerate()' because it is sealed
空欄を埋めてビルドを通す
Carが安全のためAccelerateの挙動を固定したいときにsealed overrideを使います。派生クラスはBrakeのような他のメンバーは引き続き上書きできます。
次の問題