Подразумевается в этом вопросе: почему ключевое слово new
не требуется при скрытии члена базового класса? Причина - хрупкая проблема базового класса . Предположим, у вас есть библиотека:
public class Base
{
public void M() { }
}
и вы получили класс в своей собственной кодовой базе:
public class Derived : Base
{
public void N() { }
}
Теперь авторы библиотеки выпускают новую версию, добавляя еще один метод к Base
:
public class Base
{
public void M() { }
public void N() { }
}
Если для скрытия метода требовалось новое ключевое слово, теперь ваш код не компилируется! Если сделать новое ключевое слово необязательным, все, что у вас теперь есть, - это новое предупреждение, о котором нужно беспокоиться.
EDIT
Как указывает Эрик Липперт в своем комментарии, «новое предупреждение, о котором нужно беспокоиться», резко преуменьшает цель предупреждения, которое заключается в том, чтобы «размахивать большим красным флагом». Должно быть, я спешил, когда написал это; Это раздражает, когда люди рефлексивно рассматривают предупреждения как раздражения, которые нужно терпеть, а не воспринимают их как полезную информацию.
РЕДАКТИРОВАТЬ 2
Я наконец нашел свой источник для этого ответа, который, конечно, является одним из сообщений Эрика: https://stackoverflow.com/a/8231523/385844