Shadowing в C# | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 22.11 Забрать скидку! →
Выбрать курс

Shadowing в C#

C__HeadlineSEO_970x70-1801-f7b24e.png

В языке программирования С# есть возможность изменить функциональность метода, который унаследован от базового класса. Для этого используется такой способ, как shadowing или hiding (сокрытие).

Фактически shadowing представляет собой определение метода либо свойства в классе-наследнике, причем речь идет о таком методе либо свойстве, которые соответствуют по имени и списку параметров методу либо свойству базового класса.

Чтобы сокрыть члены класса, используют ключевое слово new. Вот как это может выглядеть на практике:

1-1801-4b5bcd.png

Здесь у нас определен класс Person, который представляет человека, а также класс Employee, который представляет работника компании. При этом Employee наследует от Person все методы и свойства. Однако в классе Employee помимо унаследованных свойств присутствует еще и собственное свойство Company, где, соответственно, хранится название предприятия. При этом мы хотели бы в методе Display осуществлять вывод информации о компании одновременно с именем и фамилией на консоль. Именно для этого метод Display определяется с ключевым словом new, то есть происходит сокрытие (shadowing) реализации этого метода из базового класса.

Когда вообще можно применять сокрытие? К примеру, в вышеописанном коде метод Display в базовом классе виртуальным не является, то есть мы не можем его переопределить, однако предположим, нам не нравится его имплементация для производного класса, следовательно, у нас есть возможность использовать сокрытие для определения нужного нам функционала.

Задействуем эти классы в программном коде в методе Main:

2-1801-4f3b0b.png

Вот каким будет консольный вывод:

3-1801-57908f.png Точно так же можно реализовать и сокрытие свойств:

4-1801-704925.png

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

Мало того, у нас даже есть возможность применять сокрытие к переменным и константам, используя ключевое слово new:

5-1801-335496.png

По материалам https://metanit.com/sharp/tutorial/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 22.11 →