Вы скучаете по пониманию поведения наследования.
Когда вы создаете объект данного типа, который переопределяет некоторый виртуальный метод, вы всегда получите результат от этого метода переопределения. Приведение не меняет структуру объекта, после создания объекта может изменить его состояние после операции приведения.
static void Main(string[] args)
{
Intfc mc1 = new Derived();
Intfc mc2 = new BaseClass();
mc1.xyz();
mc2.xyz();
Console.ReadKey();
}
Это будет продукт
In Base Class
In Derived Class
Но потому что всегда есть но.
Если вы перезаписываете этот метод, вы получите результат, какой вы есть, для перезаписи метода просто используйте оператор new
public class Derived : BaseClass
{
new public void xyz()
{
Console.WriteLine("In Derived Class");
}
}
public class BaseClass : Intfc
{
public void xyz()
{
Console.WriteLine("In Base Class");
}
}
Это будет использовать новую реализацию для DeriveClass и старую для BaseClass.
Ссылки:
Что такое переопределение?
Модификатор, новый в сигнатуре метода
Какой новый модификатор?