上級 › sealedメンバーをオーバーライドしようとした原因と直し方 › パターン5
sealedメンバーをオーバーライドしようとした原因と直し方
sealed overrideを付けたメンバーを、さらに下の派生クラスでオーバーライドしようとすると出るコンパイルエラーです。
1 class Employee { 2 public virtual void Work() { System.Console.WriteLine("..."); } 3 public virtual void Rest() { System.Console.WriteLine("..."); } 4 } 5 class Manager : Employee { 6 public sealed override void Work() { System.Console.WriteLine("Manage"); } 7 public override void Rest() { System.Console.WriteLine("Break"); } 8 } 9 class SeniorManager : Manager { 10 public override void ____() { System.Console.WriteLine("Vacation"); } ^ 11 } 12 class Program { 13 static void Main(string[] args) { 14 SeniorManager s = new SeniorManager(); 15 s.Work(); 16 s.Rest(); 17 } 18 }
Program.cs(10,26): error CS0239: 'SeniorManager.Work()': cannot override inherited member 'Manager.Work()' because it is sealed
空欄を埋めてビルドを通す
Workをsealedにすることで、Managerが決めた挙動をそれ以上のクラスで変えられないようにしています。
次の問題