Предположим, что у меня есть интерфейс, как определено ниже:
public interface IFunctionality
{
void Method();
}
и я реализую этот интерфейс для абстрактного класса, как показано ниже:
public abstract class AbstractFunctionality: IFunctionality
{
public void Method()
{
Console.WriteLine("Abstract stuff" + "\n");
}
}
снова у меня есть конкретный класс, который наследует от абстрактного класса, как показано ниже:
public class ConcreteFunctionality: AbstractFunctionality
{
public void Method()
{
Console.WriteLine("Concrete stuff" + "\n");
}
}
Теперь у меня есть следующий код,
ConcreteFunctionality mostDerived = new ConcreteFunctionality();
AbstractFunctionality baseInst = mostDerived;
IFunctionality interfaceInst = mostDerived;
mostDerived.Method();
baseInst.Method();
interfaceInst.Method();
Результат, который я получаю после выполнения этого материала, выглядит следующим образом.
Concrete stuff
Abstract stuff
Abstract stuff
Но то, что я ожидал, что вывод будет "Concrete Stuff" во всех трех случаях, поскольку то, что я здесь делаю, присваивает ссылку ConcreteFunctionality
переменным типа AbstractFunctionality
и IFunctionality
.
Что происходит внутри страны. Просьба уточнить.