339.
What is the output: using System; class A { public virtual void Y() { // Used when C is referenced through A. Console.WriteLine("A.Y"); } } class B : A { public override void Y() { // Used when B is referenced through A. Console.WriteLine("B.Y"); } } class C : A { public void Y() // Can be "new public void Y()" { // Not used when C is referenced through A. Console.WriteLine("C.Y"); } } class Program { static void Main() { // Reference B through A. A ab = new B(); ab.Y(); // Reference C through A. A ac = new C(); ac.Y(); } }
View Description
In this code, the A type is used to reference the B and C types. When the A type references a B instance, the Y override from B is used. But when the A type references a C instance, the Y method from the base class A is used.
Note:
The override modifier was not used.
The C.Y method is local to the C type.
Warning:
In the program, the C type generates a warning because C.Y hides A.Y. Your program is confusing and could be fixed.
Tip:
If you want C.Y to really "hide" A.Y, you can use the new modifier, as in "new public void Y()" in the declaration.