override (Referência de C#)override (C# Reference)

O modificador override é necessário para estender ou modificar a implementação abstrata ou virtual de um método, propriedade, indexador ou evento herdado.The override modifier is required to extend or modify the abstract or virtual implementation of an inherited method, property, indexer, or event.

ExemploExample

Neste exemplo, a classe Square deve fornecer uma implementação substituída de Area porque Area é herdado do ShapesClass abstrato:In this example, the Square class must provide an overridden implementation of Area because Area is inherited from the abstract ShapesClass:

abstract class ShapesClass
{
    abstract public int Area();
}

class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid
    // a compile-time error.
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

Um método override fornece uma nova implementação de um membro herdado de uma classe base.An override method provides a new implementation of a member that is inherited from a base class. O método que é substituído por uma declaração override é conhecido como o método base substituído.The method that is overridden by an override declaration is known as the overridden base method. O método base substituído deve ter a mesma assinatura que o método override.The overridden base method must have the same signature as the override method. Para obter informações sobre herança, consulte Herança.For information about inheritance, see Inheritance.

Você não pode substituir um método não virtual ou estático.You cannot override a non-virtual or static method. O método base substituído deve ser virtual, abstract ou override.The overridden base method must be virtual, abstract, or override.

Uma declaração override não pode alterar a acessibilidade do método virtual.An override declaration cannot change the accessibility of the virtual method. O método override e o método virtual devem ter o mesmo modificador de nível de acesso.Both the override method and the virtual method must have the same access level modifier.

Não é possível usar os modificadores new, static ou virtual para modificar um método override.You cannot use the new, static, or virtual modifiers to modify an override method.

Uma declaração de propriedade de substituição deve especificar exatamente o mesmo modificador de acesso, tipo e nome que a propriedade herdada e a propriedade substituída deve ser virtual, abstract ou override.An overriding property declaration must specify exactly the same access modifier, type, and name as the inherited property, and the overridden property must be virtual, abstract, or override.

Para obter mais informações sobre como usar a palavra-chave override, consulte Controle de versão com as palavras-chave override e new e Quando usar as palavras-chave override e new.For more information about how to use the override keyword, see Versioning with the Override and New Keywords and Knowing when to use Override and New Keywords.

ExemploExample

Este exemplo define uma classe base chamada Employee e uma classe derivada chamada SalesEmployee.This example defines a base class named Employee, and a derived class named SalesEmployee. A classe SalesEmployee inclui um campo extra, salesbonus, e substitui o método CalculatePay para levar isso em consideração.The SalesEmployee class includes an extra field, salesbonus, and overrides the method CalculatePay in order to take it into account.

class TestOverride
{
    public class Employee
    {
        public string name;

        // 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)
        {
            this.name = name;
            this.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)
        {
            this.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.
        SalesEmployee employee1 = new SalesEmployee("Alice", 
                      1000, 500);
        Employee employee2 = new Employee("Bob", 1200);

        Console.WriteLine("Employee4 " + employee1.name + 
                  " earned: " + employee1.CalculatePay());
        Console.WriteLine("Employee4 " + employee2.name + 
                  " earned: " + employee2.CalculatePay());
    }
}
/*
    Output:
    Employee4 Alice earned: 1500
    Employee4 Bob earned: 1200
*/

Especificação da linguagem C#C# language specification

Para obter mais informações, consulte a Especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also