felülbírálás (C#-referencia)

override A módosító használatával kibővítheti vagy módosíthatja egy örökölt metódus, tulajdonság, indexelő vagy esemény absztrakt vagy virtuális implementációját.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

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 override metódusdeklaráció a felülírt alapmetódus pontosabb implementációját biztosítja. 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 lehet felülbírálni egy nem virtuális vagy statikus metódust. A felülírt alapmetódusnak virtualaz , abstractvagy 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 new a static, virtualvagy override 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: , abstractvagy override.

A kulcsszó használatáról további információt a overrideFelü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 elnevezett Employee alaposztályt és egy származtatott osztályt SalesEmployeehatároz meg. Az SalesEmployee osztály tartalmaz egy további mezőt, salesbonusés felülbírálja a bónusz figyelembevételének módszerét CalculatePay .

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ánakFelülbírálási metódusok szakasza.

A kovariant visszatérési típusokkal kapcsolatos további információkért lásd a Covariant visszatérési típusait a C# nyelv specifikációjában.

Lásd még