o que seguifica o virtual e qual o sentido de estar no metodo ?
o que seguifica o virtual e qual o sentido de estar no metodo ?
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 virtual
da 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!