Замещение метода в С# - Блог ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

    Выбери свою IT специальность

    Начать бесплатно

    Выбери свою IT специальность

    Начать бесплатно

      Замещение метода в С#

      Введение

      В данной статье Вы узнаете, для чего и как использовать замещение метода в C#.


      Для того, чтобы на примере показать замещение метода в С#, создадим класс «Student» с двумя полями: FirstName и LastNamе. В примере используется также метод печати, который выводит FirstName и LastName в консоль.

      class Student {

             public string FirstName;

             public string LastName;

             public virtual void Print() {

                   Console.WriteLine(FirstName + " " + LastName);

             }

      }

      Класс Student выступает как базовый/родительский класс для классов DiplomaStudent и GraduateStudent.

      class DiplomaStudent : Student {

      }

      class GraduateStudent : Student {

      }

      ПРИМЕЧАНИЕ: Если производный класс наследует базовый класс, то все учасники, кроме частных членов, доступны в производном классе. То есть, оба поля и метод печати можно вызвать/инициировать в производном классе.

      Если нужно распечатать детали студентов на экране консоли, можно создать пример двух производных классов от «Student», используя основной метод.

      class Program {

             static void Main(string[] args) {

                   DiplomaStudent ds = new DiplomaStudent();

                   ds.FirstName = "Max";

                   ds.LastName = "Payne";

                   ds.Print();

                   GraduateStudent gs = new GraduateStudent();

                   gs.FirstName = "Lara";

                   gs.LastName = "Croft";

                   gs.Print();

             }

      }

      Запустите программу. 

      Запуск программы

      На данном этапе невозможно определить, к какому типу из категорий студентов принадлежит каждый студент. Например, добавим (-studentType) и прикрепим его после имени студента, чтобы сделать его более удобным для чтения.

      Для этого можно создать метод печати для обоих производных классов.

      class DiplomaStudent : Student {

             public void Print() {

                   Console.WriteLine(FirstName + " " + LastName + " - diploma student");

             }

      }

      class GraduateStudent : Student {

             public void Print() {

                   Console.WriteLine(FirstName + " " + LastName + " - graduate student");

             }

      }

      Но если Вы хотите не скрыть реализацию базового метода, а заместить ее, то можно использовать виртуальное ключевое слово. 

      class Student {

             public string FirstName;

             public string LastName;

             public virtual void Print() {

                   Console.WriteLine(FirstName + " " + LastName);

             }

      }

      Теперь базовый метод печати стал виртуальным. То есть, его можно заменить в производном классе и добавить его реализацию.

      Но сначала надо удалить метод печати с обоих производных классов, как показано ниже:

      class DiplomaStudent : Student {

      }

      class GraduateStudent : Student {

      }

      Напишите override, потом поставьте пробел. Вы увидите метод печати в Intellisense.

      Метод печати Intellisense

      Выберите и нажмите Enter. Он унаследует метод сигнатур.

      class DiplomaStudent : Student {

             public override void Print() {

                   base.Print();

             }

      }

      class GraduateStudent : Student {

             public override void Print() {

                   base.Print();

             }

      }

      Удалите его и добавьте свою собственную реализацию, как показано ниже: 

      class DiplomaStudent : Student {

             public override void Print() {

                   Console.WriteLine(FirstName + " " + LastName + " - diploma student");

             }

      }

      class GraduateStudent : Student {

             public override void Print() {

                   Console.WriteLine(FirstName + " " + LastName + " -graduate student");

             }

      }

      Запустите программу. 

      Запуск программы

      Предположим, что по какой-то причине Вам необходимо отменить реализацию вызова и печати базового класса. Это можно сделать при помощи такой комбинации: основное ключевое слово, затем точка (.), потом метод.

      class DiplomaStudent : Student {

             public override void Print() {

                   base.Print();

             }

      }

      Пример запуска программы 

      Источник: http://www.c-sharpcorner.com/UploadFile/219d4d/method-overriding-in-C-Sharp/

      КОММЕНТАРИИ И ОБСУЖДЕНИЯ

      Пакеты подписки с доступом ко всем курсам и сервисам

      Стартовый
      • Все видеокурсы на 3 месяца
      • Тестирование по 10 курсам
      • Проверка 5 домашних заданий
      • Консультация с тренером 30 мин
      Базовый
      • Все видеокурсы на 6 месяцев
      • Тестирование по 16 курсам
      • Проверка 10 домашних заданий
      • Консультация с тренером 60 мин
      Премиум
      • Все видеокурсы на 1 год
      • Тестирование по 24 курсам
      • Проверка 20 домашних заданий
      • Консультация с тренером 120 мин
      Notification success
      Мы используем cookie-файлы, чтобы сделать взаимодействие с нашими веб-сайтами и услугами простым и значимым.