Shadowing в C#
В языке программирования С# есть возможность изменить функциональность метода, который унаследован от базового класса. Для этого используется такой способ, как shadowing или hiding (сокрытие).
Фактически shadowing представляет собой определение метода либо свойства в классе-наследнике, причем речь идет о таком методе либо свойстве, которые соответствуют по имени и списку параметров методу либо свойству базового класса.
Чтобы сокрыть члены класса, используют ключевое слово new. Вот как это может выглядеть на практике:
Здесь у нас определен класс Person, который представляет человека, а также класс Employee, который представляет работника компании. При этом Employee наследует от Person все методы и свойства. Однако в классе Employee помимо унаследованных свойств присутствует еще и собственное свойство Company, где, соответственно, хранится название предприятия. При этом мы хотели бы в методе Display осуществлять вывод информации о компании одновременно с именем и фамилией на консоль. Именно для этого метод Display определяется с ключевым словом new, то есть происходит сокрытие (shadowing) реализации этого метода из базового класса.
Когда вообще можно применять сокрытие? К примеру, в вышеописанном коде метод Display в базовом классе виртуальным не является, то есть мы не можем его переопределить, однако предположим, нам не нравится его имплементация для производного класса, следовательно, у нас есть возможность использовать сокрытие для определения нужного нам функционала.
Задействуем эти классы в программном коде в методе Main:
Вот каким будет консольный вывод:
Точно так же можно реализовать и сокрытие свойств:
При этом когда мы желаем обратиться конкретно к реализации свойства либо метода в нашем базовом классе, то мы, опять же, имеем возможность использовать ключевое слово base, обращаясь к функциональности базового класса через него.
Мало того, у нас даже есть возможность применять сокрытие к переменным и константам, используя ключевое слово new:
По материалам https://metanit.com/sharp/tutorial/.