A derived class can override a virtual method from its base class.

override An override replaces virtual base behavior for a derived class.

Method Overriding

subject
MethodOverriding.cs
Replay: real traced execution (multi-file project)
using System;

class Notifier
{
    public virtual string Message()
    {
        return "notice";
    }
}

class EmailNotifier : Notifier
{
    private readonly string subject;

    public EmailNotifier(string subject)
    {
        this.subject = subject;
    }

    public override string Message()
    {
        return "email:" + subject;
    }
}

class Program
{
    static void Main()
    {
        string subject = "Update";
        EmailNotifier notifier = new EmailNotifier(subject);
        string message = notifier.Message();

        Console.WriteLine($"subject={subject}");
        Console.WriteLine($"message={message}");
    }
}
using System;

class Notifier
{
    public virtual string Message()
    {
        return "notice";
    }
}

class EmailNotifier : Notifier
{
    private readonly string subject;

    public EmailNotifier(string subject)
    {
        this.subject = subject;
    }

    public override string Message()
    {
        return "email:" + subject;
    }
}

class Program
{
    static void Main()
    {
        string subject = "Alert";
        EmailNotifier notifier = new EmailNotifier(subject);
        string message = notifier.Message();

        Console.WriteLine($"subject={subject}");
        Console.WriteLine($"message={message}");
    }
}
using System;

class Notifier
{
    public virtual string Message()
    {
        return "notice";
    }
}

class EmailNotifier : Notifier
{
    private readonly string subject;

    public EmailNotifier(string subject)
    {
        this.subject = subject;
    }

    public override string Message()
    {
        return "email:" + subject;
    }
}

class Program
{
    static void Main()
    {
        string subject = "Receipt";
        EmailNotifier notifier = new EmailNotifier(subject);
        string message = notifier.Message();

        Console.WriteLine($"subject={subject}");
        Console.WriteLine($"message={message}");
    }
}
  1. subject ← Update

    27{28    static void Main()29    {30        string subject→ Update = "Update"; //@subject="Alert", "Receipt"31        EmailNotifier notifier = new EmailNotifier(subject);32        string message = notifier.Message();
  2. this.subject ← Update

    15public EmailNotifier(string subjectUpdate)16{17    this.subject→ Update = subjectUpdate;18}
  3. notifier ← EmailNotifier

    30string subject = "Update"; //@subject="Alert", "Receipt"31EmailNotifier notifier→ EmailNotifier = new EmailNotifier(subject);32string message = notifierEmailNotifier.Message();
  4. public override string Message()

    20public override string Message()21{22    return "email:" + subjectUpdate;23}
  5. message ← email:Update

    31    EmailNotifier notifier = new EmailNotifier(subject);32    string message→ email:Update = notifierEmailNotifier.Message();3334    Console.WriteLine($"subject={subjectUpdate}");35    Console.WriteLine($"message={messageemail:Update}");36}
    outputsubject=Update
    message=email:Update
  1. subject ← Alert

    27{28    static void Main()29    {30        string subject→ Alert = "Alert";31        EmailNotifier notifier = new EmailNotifier(subject);32        string message = notifier.Message();
  2. this.subject ← Alert

    15public EmailNotifier(string subjectAlert)16{17    this.subject→ Alert = subjectAlert;18}
  3. notifier ← EmailNotifier

    30string subject = "Alert";31EmailNotifier notifier→ EmailNotifier = new EmailNotifier(subject);32string message = notifierEmailNotifier.Message();
  4. public override string Message()

    20public override string Message()21{22    return "email:" + subjectAlert;23}
  5. message ← email:Alert

    31    EmailNotifier notifier = new EmailNotifier(subject);32    string message→ email:Alert = notifierEmailNotifier.Message();3334    Console.WriteLine($"subject={subjectAlert}");35    Console.WriteLine($"message={messageemail:Alert}");36}
    outputsubject=Alert
    message=email:Alert
  1. subject ← Receipt

    27{28    static void Main()29    {30        string subject→ Receipt = "Receipt";31        EmailNotifier notifier = new EmailNotifier(subject);32        string message = notifier.Message();
  2. this.subject ← Receipt

    15public EmailNotifier(string subjectReceipt)16{17    this.subject→ Receipt = subjectReceipt;18}
  3. notifier ← EmailNotifier

    30string subject = "Receipt";31EmailNotifier notifier→ EmailNotifier = new EmailNotifier(subject);32string message = notifierEmailNotifier.Message();
  4. public override string Message()

    20public override string Message()21{22    return "email:" + subjectReceipt;23}
  5. message ← email:Receipt

    31    EmailNotifier notifier = new EmailNotifier(subject);32    string message→ email:Receipt = notifierEmailNotifier.Message();3334    Console.WriteLine($"subject={subjectReceipt}");35    Console.WriteLine($"message={messageemail:Receipt}");36}
    outputsubject=Receipt
    message=email:Receipt