Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Verwenden Sie den override Modifizierer, um die abstrakte oder virtuelle Implementierung einer geerbten Methode, einer Eigenschaft, eines Indexers oder eines Ereignisses zu erweitern oder zu ändern.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
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. Eine override Methodendeklaration stellt eine spezifischere Implementierung der überschriebenen Basismethode bereit. 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 die newModifizierer staticoder Modifizierer nicht verwenden, virtual um eine override Methode zu ändern.
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 Employee und eine abgeleitete Klasse mit dem Namen definiert SalesEmployee. Die SalesEmployee Klasse enthält ein zusätzliches Feld und setzt die Methode CalculatePay außer Kraft, salesbonusum den Bonus 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.