HTML Diff
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