using System;
class X {
protected virtual void M() { Console.WriteLine("class X - M()"); }
protected virtual void M2() { Console.WriteLine("class X - M2()"); }
}
class Y : X {
sealed protected override void M() { Console.WriteLine("class Y : X - M()"); }
protected override void M2() { Console.WriteLine("class Y : X - M2()"); }
}
class Z : Y {
// protected override void M() { Console.WriteLine("Zclass Z : Y - M()"); } // error CS0239: `Z.M()': cannot override inherited member `Y.M()' because it is sealed
protected override void M2() { Console.WriteLine("class Z : Y - M2()"); }
}
class Program
{
static void Main()
{
var z = new Z();
// Console.WriteLine(z.M2()); // error CS1540: Cannot access protected member `X.M2()' via a qualifier of type `Z'. The qualifier must be of type `Program' or derived from it
}
}
/*
run
*/