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

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

    Подписка
    РУС
    • РУС
    • УКР
    Arrow
    🌷404🌷 Поздравляем с Днем веб-разработчика! Подробности
    Arrow

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

    advertisement advertisement

    Введение

    В данной статье Вы узнаете, для чего и как использовать замещение метода в 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/

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

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

    Библиотека современных IT знаний в удобном формате

    Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

    Стартовый
    • Все видеокурсы на 3 месяца
    • Тестирование по 10 курсам
    • Проверка 5 домашних заданий
    • Консультация с тренером 30 мин
    42.00 $
    59.99 $
    Оформить подписку
    Акция
    Базовый
    • Все видеокурсы на 6 месяцев
    • Тестирование по 16 курсам
    • Проверка 10 домашних заданий
    • Консультация с тренером 60 мин
    54.00 $
    89.99 $
    Оформить подписку
    Акция
    Премиум
    • Все видеокурсы на 1 год
    • Тестирование по 24 курсам
    • Проверка 20 домашних заданий
    • Консультация с тренером 120 мин
    85.00 $
    169.99 $
    Оформить подписку
    Акция
    Notification success