1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: сокрытие, shadowing</p>
1
<p>Теги: сокрытие, shadowing</p>
2
<p>В языке программирования С# есть возможность изменить функциональность метода, который унаследован от базового класса. Для этого используется такой способ, как<strong>shadowing</strong>или<strong>hiding</strong>(сокрытие).</p>
2
<p>В языке программирования С# есть возможность изменить функциональность метода, который унаследован от базового класса. Для этого используется такой способ, как<strong>shadowing</strong>или<strong>hiding</strong>(сокрытие).</p>
3
<p>Фактически shadowing представляет собой определение метода либо свойства в классе-наследнике, причем речь идет о таком методе либо свойстве, которые соответствуют по имени и списку параметров методу либо свойству базового класса.</p>
3
<p>Фактически shadowing представляет собой определение метода либо свойства в классе-наследнике, причем речь идет о таком методе либо свойстве, которые соответствуют по имени и списку параметров методу либо свойству базового класса.</p>
4
-
<p>Чтобы сокрыть члены класса, используют ключевое слово new. Вот как э��о может выглядеть на практике:</p>
4
+
<p>Чтобы сокрыть члены класса, используют ключевое слово new. Вот как это может выглядеть на практике:</p>
5
<p>Здесь у нас определен класс Person, который представляет человека, а также класс Employee, который представляет работника компании. При этом Employee наследует от Person все методы и свойства. Однако в классе Employee помимо унаследованных свойств присутствует еще и собственное свойство Company, где, соответственно, хранится название предприятия. При этом мы хотели бы в методе Display осуществлять вывод информации о компании одновременно с именем и фамилией на консоль. Именно для этого метод<strong>Display</strong>определяется с ключевым словом<strong>new</strong>, то есть происходит сокрытие (shadowing) реализации этого метода из базового класса.</p>
5
<p>Здесь у нас определен класс Person, который представляет человека, а также класс Employee, который представляет работника компании. При этом Employee наследует от Person все методы и свойства. Однако в классе Employee помимо унаследованных свойств присутствует еще и собственное свойство Company, где, соответственно, хранится название предприятия. При этом мы хотели бы в методе Display осуществлять вывод информации о компании одновременно с именем и фамилией на консоль. Именно для этого метод<strong>Display</strong>определяется с ключевым словом<strong>new</strong>, то есть происходит сокрытие (shadowing) реализации этого метода из базового класса.</p>
6
<p>Когда вообще можно применять сокрытие? К примеру, в вышеописанном коде метод Display в базовом классе виртуальным не является, то есть мы не можем его переопределить, однако предположим, нам не нравится его имплементация для производного класса, следовательно, у нас есть возможность использовать сокрытие для определения нужного нам функционала.</p>
6
<p>Когда вообще можно применять сокрытие? К примеру, в вышеописанном коде метод Display в базовом классе виртуальным не является, то есть мы не можем его переопределить, однако предположим, нам не нравится его имплементация для производного класса, следовательно, у нас есть возможность использовать сокрытие для определения нужного нам функционала.</p>
7
<p>Задействуем эти классы в программном коде в методе Main:</p>
7
<p>Задействуем эти классы в программном коде в методе Main:</p>
8
<p>Вот каким будет консольный вывод:</p>
8
<p>Вот каким будет консольный вывод:</p>
9
<p>Точно так же можно реализовать и сокрытие свойств:</p>
9
<p>Точно так же можно реализовать и сокрытие свойств:</p>
10
<p>При этом когда мы желаем обратиться конкретно к реализации свойства либо метода в нашем базовом классе, то мы, опять же, имеем возможность использовать ключевое слово base, обращаясь к функциональности базового класса через него.</p>
10
<p>При этом когда мы желаем обратиться конкретно к реализации свойства либо метода в нашем базовом классе, то мы, опять же, имеем возможность использовать ключевое слово base, обращаясь к функциональности базового класса через него.</p>
11
<p>Мало того, у нас даже есть возможность применять сокрытие к переменным и константам, используя ключевое слово<strong>new</strong>:</p>
11
<p>Мало того, у нас даже есть возможность применять сокрытие к переменным и константам, используя ключевое слово<strong>new</strong>:</p>
12
<p><em>По материалам https://metanit.com/sharp/tutorial/.</em></p>
12
<p><em>По материалам https://metanit.com/sharp/tutorial/.</em></p>
13
13