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