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:
https://msdn.microsoft.com/en-us/library/System.ApplicationException
https://msdn.microsoft.com/pt-br/library/system.exception(v=vs.110).aspx
NET - O padrão de projeto Decorator
NET - Padrão de Projeto Builder
C# - O Padrão Strategy (revisitado)
NET - O padrão de projeto Command
NET - Apresentando o padrão Repository