Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O override modificador é necessário para estender ou modificar a implementação abstrata ou virtual de um método herdado, propriedade, indexador ou evento.
No exemplo a seguir, a Square classe deve fornecer uma implementação substituída de GetArea porque GetArea é herdada da classe abstrata Shape :
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
Um override método fornece uma nova implementação do método herdado de uma classe base. O método substituído por uma declaração override é conhecido como o método base substituído. Um override método deve ter a mesma assinatura que o método base substituído.
override os métodos dão suporte a tipos de retorno covariantes. Em particular, o tipo de retorno de um override método pode derivar do tipo de retorno do método base correspondente.
Você não pode substituir um método não virtual ou estático. O método base substituído deve ser virtual, abstractou override.
Uma override declaração não pode alterar a acessibilidade do virtual método.
override O método e o virtual método devem ter o mesmo modificador de nível de acesso.
Você não pode usar os newmodificadores ou virtual modificadores staticpara modificar um override método.
Uma declaração de propriedade de substituição deve especificar exatamente o mesmo modificador de acesso, tipo e nome que a propriedade herdada. As propriedades de substituição somente leitura dão suporte a tipos de retorno covariantes. A propriedade substituída deve ser virtual, abstractou override.
Para obter mais informações sobre como usar a override palavra-chave, consulte Controle de versão com a substituição e novas palavras-chave e saber quando usar Substituição e Novas Palavras-chave. Para obter informações sobre herança, consulte Herança.
Exemplo
Este exemplo define uma classe base chamada Employee, e uma classe derivada chamada SalesEmployee. A SalesEmployee classe inclui um campo salesbonusextra e substitui o método CalculatePay para levá-lo em conta.
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
*/
Especificação da linguagem C#
Para obter mais informações, consulte a seção Substituir métodos da especificação da linguagem C#.
Para obter mais informações sobre tipos de retorno covariantes, consulte a observação da proposta de recurso.