class BaseClass
{
public virtual void Test(){
Console.WriteLine("This is test of base class");
}
}
class DerivedClass : BaseClass
{
public override void Test(){
Console.WriteLine("This is test of derived class");
}
}
class DerivedClass1 : BaseClass
{
public override void Test(){
Console.WriteLine("This is test of derived class-1");
}
}
сейчас, если вы используете
BaseClass b = new DerivedClass();
b.Test(); // This will derived class method
Предположим, что объект, созданный другим методом, зависит от условия, но все они получены из BaseClass
public BaseClass GetObject(int i)
{
if(i==1) return new DerivedClass();
if(i==2) return new DerivedClass1();
}
BaseClass b = GetObject(1);
b.Test(); // This will derivedclass method
BaseClass b = GetObject(2);
b.Test(); // This will derivedclass1 method
Таким образом, все зависит от значения i
, которое может быть принято во время выполнения, а во время выполнения зависит от типа ссылки b
, удерживаемой в соответствии с этим вызовом метода Test.