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

 wellingtonbalbo@gmail.com