Author Archives: wandersonaldo_m0p720f3

#09 – C# – Keyword – Virtual

Palavra-Chave: Virtual (Modificação)

Modo Mobile

Entenda um pouco sobre conceitos e utilização da palavra-chave virtual. Vamos lá:

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

Declaração

Declaração simples:

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

Agora temos um método que pode ser substituído por qualquer classe que o herde.

Exemplo simples

class ClasseBase
    {
        public virtual void Mensagem()
        {
            Console.WriteLine("Call Class Base");
        }
    }

    class ClasseDerivada : ClasseBase
    {
        public override void Mensagem()
        {
            Console.WriteLine("Call Class Derivada");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ClasseBase objBase = new ClasseBase();
            objBase.Mensagem();

            ClasseBase objDerivada = new ClasseDerivada();
            objDerivada.Mensagem();

            Console.Read();
        }
    }

Uma classe base que contém um método virtual Mensagem().

Uma classe derivada que herda da ClasseBase e substitui o método Mensagem().

cs_modificador_virtual

Durante a invocação do método virtual, o tipo de tempo de execução da instância para a qual essa chamada ocorrer irá determinar a implementação do método real a ser chamado. Então, quando Mensagem() for invocado:

  • Na primeira vez, o tipo de tempo de compilação é ClasseBase e o tipo de tempo de execução também é ClasseBase.
  • Na segunda vez, o tipo de tempo de compilação é ClasseBase e tipo de tempo de execução será ClasseDerivada.

Late Binding

Em resumo, o virtual irá receber uma ligação tardia. Decidindo qual implementação do método será aplicada em tempo de execução baseado no tipo do objeto apontado.

Métodos abstratos

Os métodos virtuais atuam de forma semelhante aos métodos abstratos nas classes base, exceto que a implementação nas classes derivadas será opcional.

Observações

Veja alguns pontos importantes:

Por padrão, um método NÃO É virtual e não podemos modificar um método não virtual.

Não é possível aplicar o virtual com os modificadores static, abstract, private ou override.

Ok! Um pouco sobre o Métodos Virtuais.