Модификатор new (С#) и небольшая задачка

интернет Компьютеры программирование задача С#

Что выведет следующий код и почему?

class Program
{
class A
{
public virtual void Print()
{
Console.WriteLine("A::Print");
}
}

class B : A
{
public override void Print()
{
Console.WriteLine("B::Print");
}
}

class C : B
{
public new void Print()
{
base.Print();

Console.WriteLine("C::Print");
}
}

static void Main(string[] args)
{
A a = new A();
A b = new B();
A c = new C();

a.Print();
b.Print();
c.Print();

Console.ReadKey();
}
}

Ответ я знаю, для мне важно "почему"

Примечание:
Я не могу понять почему именно
A::Print
B::Print
B::Print

Если new сбрасывает реализацию print, а тип с ( A c = new C(); ) именно A, но не B
Ответы:
Выведет именно так как вам известно потому, что C наследуется от B, но при этом в B метод Print не виртуальный и в C он намеренно не переопределяется/скрывается (используется new в объявлении метода). А в объявлении все три экземпляра класса (а,b и с) объявляются как экземпляры базового класса A.
т.е. если допустим написать так:
Модификатор new фактически ничего не делает, только срывает предупреждение, что Вы определяете метод, сигнатура которого совпадает с наследуемым методом (CS0108). Метод, определяемый с модификатором new, это отдельный метод, никак не связанный с наследуемым методом, кроме того, что имеет такое же имя, и никак не изменяет его поведения.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.