Hiding through inheritance ocorre quando redeclaramos nomes nas classes ou strucs derivadas, e esses nomes existem na classe base. Estão inclusos: constantes, campos, propriedades, eventos, métodos e indexadores. Operadores nunca podem ser redeclarados com a mesma assinatura em uma classe derivada, portanto uma classe derivada nunca irá ocultar um operador da classe base.
Observe o seguinte código:
class Base
{
public void F()
{
Console.WriteLine("Método da classe Base");
}
}
class DerivadaA : Base
{
public void F()
{
Console.WriteLine("Método da classe DerivadaA");
}
}
Esse código, quando compilado, gera a seguinte warning: O método DerivadaA.F( ) está ocultando o método Base.F( ). Isso implica que se fizermos uma chamada ao método DerivadaA.F( ) o método Base.F( ) não será executado. Nenhum problema até o momento, exceto o warning (que pode lhe causar muita dor de cabeça)!
Agora, vamos inserir mais uma classe derivada, dessa vez derivando de DerivadaA:
class DerivadaB : DerivadaA
{
public void G()
{
F();
}
}
Quando chamarmos o método DerivadaB.G( ) será executado o método DerivadaA.F( ). Continuamos sem nenhuma novidade. Imagine agora uma situação em que deseja chamar o método DerivadaB.G( ) e o mesmo executar o método Base.F( ).
Isso é possível!
Primeiro deve-se adicionar o new antes da declaração do método DerivadaA.F( )
class DerivadaA : Base
{
new public void F()
{
Console.WriteLine("Método da classe DerivadaA");
}
}
Dessa forma, informamos ao compilador que realmente queremos ocultar o método na herança (hiding through inheritance) e o warning desaparecerá. Agora basta alterarmos o modificador de acesso do método para private:
class DerivadaA : Base
{
new private void F()
{
Console.WriteLine("Método da classe DerivadaA");
}
}
Pronto! Agora a chamada do método DerivadaB.G( ) irá executar o método Base.F( ).
Rafael Camargo da silva - rafaelcamargo_99@hotmail.com
Microsoft Student Partner Co-Lead, trabalha na fábrica de software da Politec-Goiânia, instrutor de tecnologias de desenvolvimento Microsoft na Supera Education Center. Trabalha com desenvolvimento de softwares a mais de 6 anos.