Share via


override (Referência de C#)

O override modificador é necessário para estender ou modificar a implementação de um método herdado, propriedade, indexador ou evento abstract ou virtual.

Exemplo

Neste exemplo, o Square classe deve fornecer uma implementação substituída do Area porque Area é herdada da teoria 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 override método fornece uma nova implementação de um membro que é herdada de uma classe base. O método que é substituído por um override declaração é conhecida como o método base substituído. O método base substituído deve ter a mesma assinatura que o override método. Para obter informações sobre herança, consulte Herança (Guia de Programação em C#).

Você não pode substituir um método ou virtual não estático. Método substituído base deve ser virtual, abstract, ou override.

Um override declaração não é possível alterar a acessibilidade da virtual método. Tanto o override método e o virtual o método deve ter o mesmo nível modificador de acesso.

Não é possível usar o new, static, ou virtual modificadores para modificar um override método.

Uma declaração de propriedade de substituição deve especificar exatamente o mesmo modificador de acesso, tipo e nome como a propriedade herdada, e a propriedade substituída deve ser virtual, abstract, ou override.

Para obter mais informações sobre como usar o override palavra-chave, consulte Controle de versão com as palavras-chave override e new (Guia de Programação em C#) e saber quando usar substituição e novas palavras-chave.

Este exemplo define uma classe base chamada Employeee uma classe derivada chamada SalesEmployee. O SalesEmployee classe inclui uma propriedade extra, salesbonuse substitui o método CalculatePay para levá-la em consideração.

class TestOverride
{
    public class Employee
    {
        public string name;

        // Basepay is defined as protected, so that it may be  
        // accessed only by this class and derrived 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#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Herança (Guia de Programação em C#)

Palavras-chave C#

Modificadores (Referência de C#)

abstract (Referência de C#)

virtual (Referência de C#)

new (Referência de C#)

Polimorfismo (Guia de Programação em C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#