CSharp · Console
using System;
public class Program
{
public static void Main()
{
A a = new A();
OverrideA overrideA = new OverrideA();
NewA newA = new NewA();
IShow iOverrideA = overrideA;
IShow iNewA = newA;
// Use the most concrete type
a.ShowData(); // prints "This is Class A"
overrideA.ShowData(); // prints "This is Class OverrideA"
newA.ShowData(); // prints "This is Class NewA"
// Use IShow type - key difference is here
iOverrideA.ShowData(); // prints "This is Class OverrideA"
iNewA.ShowData(); // prints "This is Class A"
}
}
interface IShow
{
public void ShowData();
}
class A : IShow
{
public virtual void ShowData()
{
Console.WriteLine("This is Class A");
}
}
class OverrideA : A
{
public override void ShowData()
{
Console.WriteLine("This is Class OverrideA");
}
}
class NewA : A
{
public new void ShowData()
{
Console.WriteLine("This is Class NewA");
}
}