@romaro

Почему WinForms все равно обращается к свойству, которое скрыто через new?

Здесь оператор new работает предсказуемым образом (NullReferenceException не возникает):
internal class Program
{
	internal static void Main()
	{
		var child = new Child();
		var param = (int)child.Param;
	}
	
}

internal class Parent {
	internal object Param => null;
}

internal class Child : Parent {
	new internal int Param => 10;
}


Однако если попробовать переопределить в компоненте свойство Control.Command:
new IRaisableAsyncGuiCommand Command { get; init; }


При проверке типа все равно выполнится обращение к предыдущему свойству:
64d14b0097440506098792.jpeg

Это особенность винформ или я не до конца понимаю, как работает new, который вроде бы должен скрыть родительское свойство от всех вызовов?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Winforms тут непричём - это база C#.
Читай как работает полиморфизм.

Потому что new никак не влияет на виртуальные вызовы.
Тебе нужно либо делать override, либо реализовывать интерфейс, чтобы всё работало.

new - это то же самое, что если бы ты ничего вообще не приписывал к свойству. Это исключительно пометка, что ты намеренно скрываешь, а не переопределяешь.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы