override (Справочник по C#)
Модификатор override требуется для расширения или изменения абстрактной или виртуальной реализации унаследованного метода, свойства, индексатора или события.
Пример
В этом примере класс Square должен предоставить переопределенную реализацию Area, поскольку Area является унаследованным от абстрактного класса ShapesClass.
abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int side = 0;
public Square(int n)
{
side = n;
}
// Area method is required to avoid
// a compile-time error.
public override int Area()
{
return side * side;
}
static void Main()
{
Square sq = new Square(12);
Console.WriteLine("Area of the square = {0}", sq.Area());
}
interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}
}
// Output: Area of the square = 144
Метод override предоставляет новую реализацию члена, унаследованного от базового класса. Метод, переопределенный объявлением override, называется переопределенным базовым методом. Переопределенный базовый метод должен иметь ту же сигнатуру, что и метод override. Дополнительные сведения о наследовании см. в разделе Наследование (Руководство по программированию на C#).
Невиртуальный или статический метод нельзя переопределить. Переопределенный базовый метод должен иметь тип virtual, abstract или override.
Объявление override не может изменить доступность метода virtual. Методы override и virtual должны иметь одинаковый модификатор уровня доступа.
Модификаторы new, static и virtual нельзя использовать для изменения метода override.
Переопределяющее объявление свойства должна задавать такие же модификатор уровня доступа, тип и имя, которые имеются у унаследованного свойства, а переопределенное свойство должно иметь тип virtual, abstract или override.
Дополнительные сведения об использовании ключевого слова override см. в разделах Практическое руководство. Управление версиями с помощью ключевых слов "Override" и "New" (Руководство по программированию в C#) и Аспекты использованию ключевых слов "Override" и "New".
В этом примере определяется базовый класс с именем Employee и производный класс с именем SalesEmployee. Класс SalesEmployee включает дополнительное свойство salesbonus, для использования которого переопределяется метод CalculatePay.
class TestOverride
{
public class Employee
{
public string name;
// Basepay is defined as protected, so that it may be
// accessed only by this class and derrived classes.
protected decimal basepay;
// Constructor to set the name and basepay values.
public Employee(string name, decimal basepay)
{
this.name = name;
this.basepay = basepay;
}
// Declared virtual so it can be overridden.
public virtual decimal CalculatePay()
{
return basepay;
}
}
// Derive a new class from Employee.
public class SalesEmployee : Employee
{
// New field that will affect the base pay.
private decimal salesbonus;
// The constructor calls the base-class version, and
// initializes the salesbonus field.
public SalesEmployee(string name, decimal basepay,
decimal salesbonus) : base(name, basepay)
{
this.salesbonus = salesbonus;
}
// Override the CalculatePay method
// to take bonus into account.
public override decimal CalculatePay()
{
return basepay + salesbonus;
}
}
static void Main()
{
// Create some new employees.
SalesEmployee employee1 = new SalesEmployee("Alice",
1000, 500);
Employee employee2 = new Employee("Bob", 1200);
Console.WriteLine("Employee4 " + employee1.name +
" earned: " + employee1.CalculatePay());
Console.WriteLine("Employee4 " + employee2.name +
" earned: " + employee2.CalculatePay());
}
}
/*
Output:
Employee4 Alice earned: 1500
Employee4 Bob earned: 1200
*/
Спецификация языка C#
Дополнительные сведения см в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
См. также
Ссылки
Наследование (Руководство по программированию на C#)
Модификаторы (Справочник по C#)
Полиморфизм (Руководство по программированию на C#)
Основные понятия
Руководство по программированию на C#