Olá pessoal, neste artigo veremos os conceitos e exemplos das palavras-chave Virtual e Override e veremos também sobre o modificador Sealed. Acompanhem:
Virtual e Override – Com o uso da palavra-chave virtual (destinada a métodos, propriedades, indexadores e eventos), determinamos que um membro pode ser sobrescrito em uma classe filha. Por sua vez, usando a palavra-chave override determinamos que na classe derivada, um membro virtual da classe base pode ser sobrescrito.
Devemos ter em mente que ambas as palavras-chave completam uma à outra. Importante salientar também que a propagação da palavra-chave virtual ocorre para descendentes. Um método virtual pode ser sobrescrito em descendentes e, ainda, em uma classe derivada.
Veja um exemplo com o uso das palavras-chave:
public class ClasseBase
{
//Declarando um método que pode ser sobrescrito
public virtual void ExibeTexto()
{
string texto = "Texto da classe Base";
Console.WriteLine(texto);
}
}
public class Derivada : ClasseBase
{
//Sobrescrevendo o método da classe Base
public override void ExibeTexto()
{
base.ExibeTexto();
Console.WriteLine("\nTexto da classe Derivada");
}
}
E no método Main:
DadosPessoa.Derivada objDerivada = new DadosPessoa.Derivada();
objDerivada.ExibeTexto();
Console.ReadKey();
Veja o resultado (note que é exibido o texto da classe derivada):Obs: o uso do virtual em um método indica que ele pode ser sobreposto em uma classe derivada, opcionalmente. Já se declararmos um método como abstract deve, obrigatoriamente, ser sobreposto.
Modificador Sealed – O modificador sealed (também conhecido como selado) define que uma classe não pode ser uma classe base, ou seja, não pode ter herdeiras. Uma classe sealed está pronta para uso e deve ser empregada no programa. Devido especialmente às suas características, as classes sealed podem ser consideradas o oposto das classes abstratas.
Além das explicações mencionadas referentes às classes sealed, devemos considerar alguns outros, conforme podemos ver abaixo:
- Os membros sealed não podem ser sobrescritos, mas devem sobrescrever um membro virtual ou virtual deduzido (por exemplo, um membro abstrato);
- O modificador sealed deve ser combinado com a palavra-chave override. Apesar de não poder ser aplicado a membros estáticos, ele pode ser aplicado a propriedades, métodos, indexadores e eventos;
- A Common Language Runtime (CLR) está apta a realizar otimizações nos membros sealed.
Agora veja o exemplo a seguir, que mostra o uso do modificador sealed:
public class ClasseBase
{
public virtual void Pessoa()
{
string mensagem = "Mensagem padrão da classe Base";
Console.WriteLine(mensagem);
}
}
//Classe extensível
public sealed class ClasseDerivada : ClasseBase
{
//Sobrescrita do método
public override void Pessoa()
{
Console.WriteLine("Sobrescrita do método!");
}
}
E no método Main:
ClasseDerivada objClasseDerivada = new ClasseDerivada();
objClasseDerivada.Pessoa();
Console.ReadKey();
Veja o resultado (note que é exibido o texto da classe derivada):
Fonte de Consulta: Apostila de C#, da Impacta Tecnologia.
Assim finalizo o artigo. Muito obrigado a todos!
Um abraço, e até o próximo artigo.
Wellington Balbo de Camargo