Переопределение (override) используется для реализации полиморфизма, позволяя классу-наследнику предоставить свою реализацию виртуального, абстрактного или унаследованного метода. Ключевое слово virtual
в базовом классе и override
в наследнике обязательны.
Сокрытие (hiding, shadowing) методом с тем же именем в классе-наследнике метода из базового класса. Метод базового класса сохраняется, но доступ к нему из экземпляра наследника осуществляется через явное приведение типа или ключевое слово base
. Используется ключевое слово new
в наследнике.
Признак | Переопределение (Override) | Сокрытие (Hiding) |
---|---|---|
Ключевое слово | virtual (базовый), override (наследник) | new (наследник) |
Полиморфизм | Да, вызывается реализация наследника | Нет, вызывается реализация в зависимости от типа ссылки |
Вызов по ссылке базового типа | Вызывается переопределенный метод наследника | Вызывается метод базового класса |
Доступ к методу базового класса | Через base.MethodName() | Через base.MethodName() или приведение типа |
csharp
Переопределение (override) используется для реализации полиморфизма, позволяя классу-наследнику предоставить свою реализацию виртуального, абстрактного или унаследованного метода. Ключевое слово virtual
в базовом классе и override
в наследнике обязательны.
Сокрытие (hiding, shadowing) методом с тем же именем в классе-наследнике метода из базового класса. Метод базового класса сохраняется, но доступ к нему из экземпляра наследника осуществляется через явное приведение типа или ключевое слово base
. Используется ключевое слово new
в наследнике.
Признак | Переопределение (Override) | Сокрытие (Hiding) |
---|---|---|
Ключевое слово | virtual (базовый), override (наследник) | new (наследник) |
Полиморфизм | Да, вызывается реализация наследника | Нет, вызывается реализация в зависимости от типа ссылки |
Вызов по ссылке базового типа | Вызывается переопределенный метод наследника | Вызывается метод базового класса |
Доступ к методу базового класса | Через base.MethodName() | Через base.MethodName() или приведение типа |
csharp
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.