Resumo : neste tutorial, você aprenderá como usar o novo modificador C# para os membros de uma subclasse para ocultar explicitamente um membro com o mesmo nome da classe base.
Introdução ao novo modificador C#
Na herança , se um membro de uma subclasse tiver o mesmo nome que o membro de uma classe base, o compilador C# emitirá um aviso. Por exemplo:
class Person
{
public string Name { get; set; }
public string Introduce() => $"Hi, I'm {Name}.";
}
class Employee : Person
{
public string JobTitle { get; set; }
public string Introduce() => $"Hi, I'm {Name}. I'm a {JobTitle}.";
}
Linguagem de código: C# ( cs )
Neste exemplo:
- A
Person
é a classe base e aEmployee
é uma subclasse que herda daPerson
classe. - Ambas
Person
asEmployee
classes e têm o mesmo métodoIntroduce()
que retorna uma string.
O compilador C# emite o seguinte aviso:
'Employee.Introduce()' hides inherited member 'Person.Introduce()'. Use the new keyword if hiding was intended.
Linguagem de código: texto simples ( texto simples )
Indica claramente que o Introduce()
método da Employee
classe esconde o Introduce()
método da Person
classe.
Quando um método na subclasse oculta um membro da classe base, o membro da subclasse substitui o membro da classe base.
Normalmente, você não deseja ocultar um método da classe base. Geralmente, isso acontece por acidente quando você adiciona um método à classe base com o mesmo nome de um método da subclasse. Portanto, o compilador emite o aviso para ajudá-lo a reconhecer antecipadamente uma consequência não intencional.
Entretanto, se você realmente quiser ocultar um método da classe base, poderá usar o novo modificador para o membro na subclasse. Por exemplo:
class Person
{
public string Name { get; set; }
public string Introduce() => $"Hi, I'm {Name}.";
}
class Employee : Person
{
public string JobTitle { get; set; }
public new string Introduce() => $"Hi, I'm {Name}. I'm a {JobTitle}.";
}
Linguagem de código: C# ( cs )
Neste exemplo, adicionamos o novo modificador ao Introduce()
método. O novo modificador comunica nossa intenção ao compilador e outros desenvolvedores de que o Introduce()
método duplicado não é um acidente. Além disso, o novo modificador suprime o aviso do compilador.
Além dos métodos, você pode usar o novo modificador para outros membros, como campos, propriedades e indexadores.
Resumo
- Use o novo modificador C# para os membros da subclasse para ocultar os membros de uma classe base.