C# - Apresentando virtual


 Hoje veremos os conceitos sobre virtual na linguagem C#.

A palavra-chave ou modificador virtual é usado para modificar uma declaração de método, propriedade, indexador ou evento e permitir que ela seja substituída em uma classe derivada. (usando o modificador override)

Exemplo: No exemplo abaixo o método Area pode ser substituído por qualquer classe que o herde :

public virtual double Area()   
{  
    return x * y;  
} 

Por padrão um método não é virtual e você não pode modificar um método não virtual.

Além disso, não é possível usar o modificador virtual com os modificadores static, abstract, private ou override.

No exemplo abaixo temos:



Ao chamar um método virtual, o tipo de tempo de execução da instância para a qual essa chamada ocorre determina a implementação do método real a ser chamado.

A partir do exemplo acima, quando chamamos pela primeira vez ExibeMensagem(), o tipo de tempo de compilação é "ClasseBase" e o tipo de tempo de execução também é "ClasseBase".

Quando chamamos o método pela segunda vez, o tipo de tempo de compilação é "ClasseBase" e tipo de tempo de execução é "ClasseDerivada".

Ao chamar um método virtual, o tipo de tempo de execução da instância para a qual essa chamada ocorre determina a implementação do método real a ser chamado.

A partir do exemplo acima, quando chamamos pela primeira vez ExibeMensagem(), o tipo de tempo de compilação é "ClasseBase" e o tipo de tempo de execução também é "ClasseBase".

Quando chamamos o método pela segunda vez, o tipo de tempo de compilação é "ClasseBase" e tipo de tempo de execução é "ClasseDervida".

Assim podemos entender que com "virtual" você recebe um late binding ou "ligação tardia". Qual implementação do método será usada é decidida em tempo de execução com base no tipo do objeto apontado.

Os métodos virtuais são semelhantes aos métodos abstratos nas classes base, exceto que sua implementação nas classes derivadas é opcional.

E estamos conversados...

'(Disse Jesus) - Nisto todos conhecerão que sois meus discípulos, se vos amardes uns aos outros.'
João 13:35

Referências:


José Carlos Macoratti