C#. Переопределение и скрытие методов
Переопределение и скрытие методов
В этой статье, я расскажу об использовании ключевых слов new и override применительно к методам классов в C#. Я не буду затрагивать все тонкости использования этих ключевых слов в данном контексте, а наоборот, постараюсь донести самые основные моменты в доступной форме. Скажу сразу, что тема настоящей статьи актуальна при условии, что Вы знакомы с основами ООП (объектно-ориентированного программирования). И так, к делу!
Механизмы переопределения и скрытия методов используются при наличии наследования, и то, не в каждой ситуации, а только в тех, когда Вы создаете в производном классе метод, повторяющий метод базового класса (естественно со своей, специфической реализацией, отличающейся от реализации базового). Давайте сначала разберем случай скрытия метода базового класса в производном.
Представьте, что в определенный момент разработки, Вы понимаете, что метод базового класса (а точнее его реализация) в производном (в производный класс, он попал «по наследству»), работает не так как Вы хотите! И тогда, вы решаете создать подобный метод в производном классе, но с доработанной реализацией. Причем, Вы не хотите придумывать для этого метода какое-то новое название. По двум причинам, во-первых, у метода уже отличное название, а во-вторых Вы не хотите, чтобы пользователю класса был доступен «неподходящий» метод, пришедший из базового класса (замену которому Вы и собираетесь разрабатывать). На практике, это может выглядеть примерно так:
//Базовый класс class FirstClass { //Самый важный метод public void DoSomthing() { //Выводим в консоль, что это метод базового класса Console.WriteLine("FirstClass.DoSomething"); } } //Производный класс class SecondClass : FirstClass { //Тот же важнейший метод что и в базовом public new void DoSomthing() { //Но с другой реализацией (выводим в консоль, что это метод производного класса) Console.WriteLine("SecondClass.DoSomething"); } }
Обратите внимание на выделенную строку. Как видите, в производном классе мы тоже объявили метод «DoSomthing», с таким же прототипом, что и в базовом классе. Но есть одна важная деталь, так как мы решили скрыть метод базового класса, заменив его новым методом, мы указали ключевое слово new сразу после модификатора доступа public.
А теперь, давайте разберемся с переопределением методов базового класса в производном. Тут ситуация немного другая, переопределение методов применяется тогда, когда метод базового класса является виртуальным (для чего нужны виртуальные методы, я рассказывал в уроке № 22 базового курса C#). Давайте модифицируем наш базовый класс, сделав его главный метод виртуальным:
//Базовый класс class FirstClass { //Самый важный метод (виртуальный) public virtual void DoSomthing() { //Выводим в консоль, что это метод базового класса Console.WriteLine("FirstClass.DoSomething"); } }
Теперь метод «DoSomthing» стал виртуальным. И тогда, чтобы не скрыть, а переопределить этот метод в производном классе, нужно использовать ключевое слово override, вместо new, как показано в примере ниже:
//Производный класс class SecondClass : FirstClass { //Тот же важнейший метод что и в базовом (переопределенный) public override void DoSomthing() { //Но с другой реализацией (выводим в консоль, что это метод производного класса) Console.WriteLine("SecondClass.DoSomething"); } }
Как видите, всё довольно просто! Да это только основные варианты использования ключевых слов new и override по отношению к методам класса, есть еще ряд нюансов, но на начальном уровне изучения, достаточно и основных моментов. Главное запомнить, что ключевое слово new скрывает метод базового класса (в том числе и виртуальный), а override переопределяет виртуальный метод базового класса.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.