3
respostas

Palavra reservada "virtual"

o que seguifica o virtual e qual o sentido de estar no metodo ?

3 respostas

Olá José, A palavra virtual significa que o método pode ser "reescrito", mudar o comportamento.. vamos supor que você tenha uma classe X com o método virtual Calcular, você tem uma classe Subtrair, Somar e Multiplicar que vão herdar da classe X. Nas classes filhas(que herdam da X) você altera o comportamento do método virtual Calcular através do override. Dentro de cada classe filha o método Calcular tem comportamento específico, então na classe Somar o método Calcular vai efetuar uma soma, na classe Subtrair o método vai efetuar uma subtracão. Caso ainda esteja com dúvidas, coloco um exemplo.

------------------------ Editado ------------------------ José, o exemplo da Ana é um bom exemplo, talvez você não entenda por não simular algo "da vida real". Usando o exemplo dela

public class Class2 : Class1
    {
        //Sobrescrevendo o método
        public override void ExibeTexto()
        {
            base.ExibeTexto();//< Aqui ela optou em chamar o método base, ou seja, da classe Pai (Class1), não precisa ter esta linha, você pode colocar qualquer mensagem aqui ou alterar a propriedade da Class1 antes de chamar esta linha. Neste caso a propriedade não deve ser private.

        }
    }

Você pode esperar como parâmetro em algum outro método a Class1 que ele aceitará tanto Class1 quanto a Class2.

Utiliza-se muito isto com interfaces

poderia colocar um exemplo por favor ?

Olá José, tudo bem?

Vou tentar exemplificar de uma forma simples, apenas para exibir uma mensagem na tela.

public class Class1
        {
            //Método que pode ser sobrescrito
            public virtual void ExibeTexto()
            {
                string texto = "Texto da classe Base"; 

                Console.WriteLine(texto);
            }
        }

public class Class2 : Class1
        {
            //Sobrescrevendo o método
            public override void ExibeTexto()
            {
                base.ExibeTexto();               
            }
        }

Agora no método main, vamos chamar a Class2, mas o que será exibido no console será a mensagem do método virtualda Class1.

static void Main(string[] args)
        {
            Class2 exibe = new Class2();

            exibe.ExibeTexto();

            Console.ReadLine();
        }

Espero ter ajudado, caso ainda tenha ficado com alguma dúvida, fique tranquilo para perguntar novamente.

Abraços!