Сокрытие метода потомком в C#
Если в потомке объявить метод с тем же именем, что у базы, метод базы не исчезает.
Пока база не разрешает замену метода, компилятор
смотрит на тип переменной, а не на то, какой объект
в ней лежит. Переменная типа User вызовет
Greet из User, даже если объект создан
как Student. Чтобы явно показать сокрытие,
перед методом потомка пишут new.
Запишем оба метода и сравним вызовы:
class User {
public void Greet() {
Console.WriteLine("user");
}
}
class Student : User {
public new void Greet() {
Console.WriteLine("student");
}
}
Через переменную базы и через переменную потомка вывод разный:
Student student = new Student();
User link = student;
link.Greet();
student.Greet();
Сделайте классы User и Employee
с методом Role, который выводит разные
строки. Сохраните объект Employee
в переменной типа User и выведите,
какая строка появится при вызове.