Virtual Methods and Override Modifier in C#

Virtual Methods and Override Modifier in C#

Virtual methods are meant to be re-implemented in derived classes. The C# language provides the override modifier for this purpose. This keyword specifies that a method replaces its virtual base method.

Whereas a virtual method introduces a new method, an override method specializes an existing inherited virtual method by providing a new implementation of that method.

Example

This program illustrates the difference between an override method in a derived class, and a method that is not an override method. It does nothing useful but helps us learn about override methods.

In the example, the class A is the base class. It has the virtual method Y. In class B, we override Y. In class C, we implement Y but do not specify that it overrides the base method.

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();
    }
}

Result
B.Y
A.Y

In this example, 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.