Поскольку вы пропускаете явное предупреждение в IDE
Код серьезности Описание Код проекта: Состояние подавления строки файла Предупреждение CS0108 «B.SomeMethod ()» скрывает унаследованный элемент «A.SomeMethod ()».Используйте новое ключевое слово, если было скрыто.
Предупреждение компилятора (уровень 2) CS0108
'member1' скрывает унаследованный член 'member2'.Используйте ключевое слово new, если было скрыто.
Была объявлена переменная с тем же именем, что и переменная в базовом классе.Однако новое ключевое слово не использовалось.Это предупреждение информирует вас о том, что вы должны использовать новый;переменная объявляется так, как если бы new использовался в объявлении.
Если вы хотите скрыть это, используйте ключевое слово new
Однако, если вы хотите вызвать егозатем используйте virtual
и override
его или просто измените имя метода, чтобы не скрывать его
class A
{
public virtual void SomeMethod()
{
Console.Write("This is A");
}
}
class B : A
{
public override void SomeMethod()
{
base.SomeMethod();
Console.Write("This is B");
}
public void OtherMethod()
{
Console.Write("This is New method");
}
}
virtual (C # Reference)
Виртуальное ключевое слово используется для изменения метода, свойства, индексатора или объявления события и позволяет переопределять его в производном классе.Например, этот метод может быть переопределен любым классом, который его наследует:
override (C # Reference)
Модификатор переопределения требуется длярасширить или изменить абстрактную или виртуальную реализацию унаследованного метода, свойства, индексатора или события.
Полиморфизм (Руководство по программированию в C #)
В куче в этой ситуации при создании экземпляра объекта указатель типа объекта указывает на A или B?
Вам не нужно беспокоиться о том, что происходит в куче (это детали реализации), только то, что позволяет язык.
Однако технически A не существует, есть только экземпляр B, который имеет всю реализацию A (если вам это нужно)