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

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

Начать бесплатно
ITVDN logo
Видеокурсы по
программированию

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

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

Хочешь больше?

Смотри бесплатно:

Веб-дизайн с Figma. Легкий старт

Типичные ошибки в коде на примере С++, С# и Java

Scrum на 24 команды? Масштабируем Agile, используя LeSS!

Хочешь больше?

Смотри бесплатно:

Веб-дизайн с Figma. Легкий старт

Типичные ошибки в коде на примере С++, С# и Java

Scrum на 24 команды? Масштабируем Agile, используя LeSS!

Введение

В данной статье Вы узнаете, для чего и как использовать замещение метода в 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 месяца
  • Тестирование по 6 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
Базовый
  • Все видеокурсы на 6 месяцев
  • Тестирование по 8 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
Премиум
  • Все видеокурсы на 12 месяцев
  • Тестирование по 16 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
169.99 $
Подписка
Notification success