felülbírálás (C#-referencia)
A override
módosító egy örökölt metódus, tulajdonság, indexelő vagy esemény absztrakt vagy virtuális implementációjának kiterjesztéséhez vagy módosításához szükséges.
Az alábbi példában az Square
osztálynak felül kell bírálnia a végrehajtást GetArea
, mert GetArea
az az absztrakt Shape
osztálytól öröklődik:
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
A override
metódus az alaposztálytól örökölt metódus új implementációját biztosítja. A deklaráció által override
felülírt metódust felüldiírált alapmetódusnak nevezzük. Egy override
metódusnak ugyanazzal az aláírásával kell rendelkeznie, mint a felülírt alapmetódusnak. override
metódusok támogatják a kovariáns visszatérési típusokat. Egy metódus visszatérési override
típusa különösen a megfelelő alapmetódus visszatérési típusából származhat.
Nem virtuális vagy statikus metódust nem lehet felülbírálni. A felülírt alapmetódusnak virtual
az , abstract
vagy override
.
A override
deklaráció nem módosíthatja a virtual
metódus akadálymentességét. override
A metódusnak és a virtual
metódusnak is ugyanazzal a hozzáférési szint-módosítóval kell rendelkeznie.
A metódusok nem módosíthatók override
a new
, static
vagy virtual
módosítók használatával.
A felülíró tulajdonságdeklarációnak pontosan ugyanazt a hozzáférési módosítót, típust és nevet kell megadnia, mint az örökölt tulajdonság. Az írásvédett felülbírálási tulajdonságok támogatják a kovariáns visszatérési típusokat. A felülírt tulajdonságnak a következőnek kell lennie virtual
: , abstract
vagy override
.
A kulcsszó használatáról további információt a override
Felülbírálás és az Új kulcsszavak verziószámozása, valamint a Felülbírálás és az Új kulcsszavak használata című témakörben talál. Az öröklésről további információt az Öröklés című témakörben talál.
Példa
Ez a példa egy névvel ellátott Employee
alaposztályt és egy származtatott osztályt SalesEmployee
határoz meg. Az SalesEmployee
osztály tartalmaz egy további mezőt, salesbonus
és felülbírálja a metódust CalculatePay
annak figyelembe vétele érdekében.
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# nyelvspecifikáció
További információ: A C# nyelv specifikációjának Felülbírálási metódusok szakasza.
A kovájt visszatérési típusokról további információt a funkciójavaslat megjegyzésében talál.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: