«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Виртуальный/переопределение против нового в C#: когда мне следует использовать, какое ключевое слово для переоценки метода?

Виртуальный/переопределение против нового в C#: когда мне следует использовать, какое ключевое слово для переоценки метода?

Опубликовано в 2025-02-06
Просматривать:156

Virtual/Override vs. New in C#: When Should I Use Which Keyword for Method Overriding?

virtual/override и новые ключевые слова в C#: когда использовать какое ключевое слово для переписывания метода?

]

, определяя методы в базовых классах, программисты часто сталкиваются с проблемой использования «виртуальных» или «новых» ключевых слов. Это решение значительно влияет на поведение переписывания методов в производных классах.

]

virtual override

используйте ключевое слово «виртуальное» в методе базового класса, чтобы указать, что оно может быть переопределено в полученном классе. Чтобы переопределить метод, полученный класс должен использовать ключевое слово «переопределить». Это гарантирует, что переопределенный метод работает, как и ожидалось, сохраняя иерархию наследования и полиморфизм.

]

, когда полученный класс вызывает переписанный метод, он выполнит переопределенную версию, даже если эталонная переменная, содержащая объект, имеет тип базового класса. Это называется поздним привязкой и позволяет динамическое поведение.

]

новое ключевое слово

вместо этого ключевое слово «новое» в методе полученного класса объявляет новый метод, который скрывает унаследованные методы с тем же именем. При использовании новый метод заменяет унаследованные методы в полученном классе, что уничтожает полиморфизм.

]

, когда полученный класс вызывает метод, объявленный «Новым», он выполняет новый метод независимо от типа эталонной переменной, которая удерживает объект. Это считается ранним связыванием и препятствует полиморфизму.

]

Пример

рассмотрим следующий пример кода:

]

public class Base
{
    public virtual bool DoSomething() { return false; }
}

public class Derived : Base
{
    public new bool DoSomething() { return true; }
}
Если вы назначаете экземпляр, полученную с переменной базы типа и вызовите dosomething (), результат будет false, если вы используете виртуальную/переопределение, но если вы используете новый, результат будет true. Это подчеркивает разницу между поздним связыванием и ранним связыванием.

]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3