上級 › sealedメンバーをオーバーライドしようとした原因と直し方 › パターン4
sealedメンバーをオーバーライドしようとした原因と直し方
sealed overrideを付けたメンバーを、さらに下の派生クラスでオーバーライドしようとすると出るコンパイルエラーです。
1 class Instrument { 2 public virtual void Play() { System.Console.WriteLine("..."); } 3 public virtual void Tune() { System.Console.WriteLine("..."); } 4 } 5 class Guitar : Instrument { 6 public sealed override void Play() { System.Console.WriteLine("Strum"); } 7 public override void Tune() { System.Console.WriteLine("Tune up"); } 8 } 9 class BassGuitar : Guitar { 10 public override void ____() { System.Console.WriteLine("Thump"); } ^ 11 } 12 class Program { 13 static void Main(string[] args) { 14 BassGuitar b = new BassGuitar(); 15 b.Play(); 16 b.Tune(); 17 } 18 }
Program.cs(10,26): error CS0239: 'BassGuitar.Play()': cannot override inherited member 'Guitar.Play()' because it is sealed
空欄を埋めてビルドを通す
Playはsealed overrideされているため、それ以上下の階層ではオーバーライドできません。
次の問題