Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der override Modifizierer ist erforderlich, um die abstrakte oder virtuelle Implementierung einer geerbten Methode, einer Eigenschaft, eines Indexers oder eines Ereignisses zu erweitern oder zu ändern.
Im folgenden Beispiel muss die Square Klasse eine überschriebene Implementierung bereitstellen, da GetAreaGetArea sie von der abstrakten Shape Klasse geerbt wird:
abstract class Shape
{
public abstract int GetArea();
}
class Square : Shape
{
private int _side;
public Square(int n) => _side = n;
// GetArea method is required to avoid a compile-time error.
public override int GetArea() => _side * _side;
static void Main()
{
var sq = new Square(12);
Console.WriteLine($"Area of the square = {sq.GetArea()}");
}
}
// Output: Area of the square = 144
Eine override Methode stellt eine neue Implementierung der von einer Basisklasse geerbten Methode bereit. Die Methode, die durch eine override Deklaration überschrieben wird, wird als überschriebene Basismethode bezeichnet. Eine override Methode muss dieselbe Signatur wie die überschriebene Basismethode aufweisen.
override Methoden unterstützen kovariante Rückgabetypen. Insbesondere kann der Rückgabetyp einer override Methode vom Rückgabetyp der entsprechenden Basismethode abgeleitet werden.
Sie können keine nicht virtuelle oder statische Methode außer Kraft setzen. Die überschriebene Basismethode muss virtual, oder abstractoverride.
Eine override Deklaration kann die Barrierefreiheit der virtual Methode nicht ändern. Sowohl die override Methode als auch die virtual Methode müssen denselben Modifizierer auf Zugriffsebene aufweisen.
Sie können eine Methode nicht mit den newstaticModifizierern oder virtual Modifizierern ändernoverride.
Eine überschreibende Eigenschaftsdeklaration muss genau denselben Zugriffsmodifizierer, Typ und Namen wie die geerbte Eigenschaft angeben. Schreibgeschützte Außerkraftsetzungseigenschaften unterstützen kovariante Rückgabetypen. Die überschriebene Eigenschaft muss virtual, oder abstractoverride.
Weitere Informationen zur Verwendung des override Schlüsselworts finden Sie unter Versionsverwaltung mit der Außerkraftsetzung und neuen Schlüsselwörtern und wissen, wann Überschreibung und neue Schlüsselwörter verwendet werden sollen. Informationen zur Vererbung finden Sie unter "Vererbung".
Beispiel
In diesem Beispiel wird eine Basisklasse namens Employeeund eine abgeleitete Klasse mit dem Namen definiert SalesEmployee. Die SalesEmployee Klasse enthält ein zusätzliches Feld salesbonusund überschreibt die Methode CalculatePay , um sie zu berücksichtigen.
class TestOverride
{
public class Employee
{
public string Name { get; }
// Basepay is defined as protected, so that it may be
// accessed only by this class and derived classes.
protected decimal _basepay;
// Constructor to set the name and basepay values.
public Employee(string name, decimal basepay)
{
Name = name;
_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)
{
_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.
var employee1 = new SalesEmployee("Alice", 1000, 500);
var employee2 = new Employee("Bob", 1200);
Console.WriteLine($"Employee1 {employee1.Name} earned: {employee1.CalculatePay()}");
Console.WriteLine($"Employee2 {employee2.Name} earned: {employee2.CalculatePay()}");
}
}
/*
Output:
Employee1 Alice earned: 1500
Employee2 Bob earned: 1200
*/
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt " Außerkraftsetzungsmethoden " der C#-Sprachspezifikation.
Weitere Informationen zu kovarianten Rückgabetypen finden Sie im Featurevorschlagshinweis.