Delen via


overschrijven (C#-verwijzing)

Gebruik de override wijzigingsfunctie om de abstracte of virtuele implementatie van een overgenomen methode, eigenschap, indexeerfunctie of gebeurtenis uit te breiden of te wijzigen.

De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.

De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.

Aanbeveling

Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.

In het volgende voorbeeld moet de Square klasse een overschreven implementatie bieden van GetArea omdat GetArea deze is overgenomen van de abstracte Shape klasse:

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

Een override methode biedt een nieuwe implementatie van de methode die is overgenomen van een basisklasse. Een override methodedeclaratie biedt een specifiekere implementatie van de overschreven basismethode. Een override methode moet dezelfde handtekening hebben als de overschreven basismethode. override methoden ondersteunen covariant retourtypen. Met name het retourtype van een override methode kan worden afgeleid van het retourtype van de bijbehorende basismethode.

U kunt een niet-virtuele of statische methode niet overschrijven. De overschreven basismethode moet zijn virtual, abstractof override.

Een override declaratie kan de toegankelijkheid van de virtual methode niet wijzigen. Zowel de override methode als de virtual methode moeten dezelfde wijzigingsfunctie op toegangsniveau hebben.

U kunt de new, staticof virtual modifiers niet gebruiken om een override methode te wijzigen.

Een overschrijvingsdeclaratie van eigenschappen moet exact dezelfde toegankelijkheidsaanpassing, hetzelfde type en dezelfde naam opgeven als de overgenomen eigenschap. Alleen-lezen overschrijven eigenschappen ondersteunen covariant retourtypen. De overschreven eigenschap moet virtual, abstractof override.

Zie override en weten wanneer u onderdrukking en nieuwe trefwoorden moet gebruiken voor meer informatie over het gebruik van het trefwoord. Zie Overname voor meer informatie over overname.

Voorbeeld

In dit voorbeeld wordt een basisklasse met de naam Employee en een afgeleide klasse gedefinieerd.SalesEmployee De SalesEmployee klasse bevat een extra veld en salesbonusoverschrijft de methode CalculatePay om rekening te houden met de bonus.

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#-taalspecificatie

Zie de sectie Onderdrukkingsmethoden van de C#-taalspecificatie voor meer informatie.

Zie de notitie van het functievoorstel voor meer informatie over covariant-retourtypen.

Zie ook