06 – Sobrescrita – Override


No exemplo a seguir, abordarei o conceito de sobrescrita. Uma idéia que me parece muito interessante pelo fato de você poder propagar o que foi feito nos métodos que herda. Não vou me aprofundar no assunto porque descobri que existe um modificador chamado sealed no post do site devmedia, mas que não falarei dele aqui, pois não é meu foco neste momento. Ah, por que então vou escrever a respeito de sobrescrita aqui? Bem, eu tenho meu ponto de vista e imagino que se você ler vários posts pode refinar seu entendimento. Eis o código.

fonte: https://mastigado.wordpress.com


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleTesteSobrescrita
{
    class Employee
    {
       protected virtual void DoWork()
       {
       }

       protected void Retire()
       {
       }
}

    class Manager : Employee
    {
       protected override void DoWork()
       {
          base.DoWork();
       }

       protected new void Retire() {
       }
    }

    class Principal : Manager
    {
       protected override void DoWork()
       {
           base.DoWork();
       }
    }
}

A classe Employee contêm 2 métodos que serão sobreescritos.  O método DoWork() é virtual porque é próprio para ser sobreescrito.  Já o método Retire se trata de um método comum.


class Employee
{
    protected virtual void DoWork()
    {
    }

    protected void Retire()
    {
    }
}

Na classe Manager que herdou a classe Employee, o método DoWork() está fazendo sobreescrita do método da classe que herdou porque esta foi declarada como virtual.  Já o método Retire() não faz uma sobrescrita, pois o fato de ele estar com “new”, diz que ele está na verdade declarando um outro método, mesmo tendo o mesmo nome estando em um classe que ele herda. Já o fato de
o método Retire() da classe Employee não ter sido declarado como “virtual” em sua assinatura, também compromete a  sobrescrita. Também é bom lembrar que o caso de não ter sido declarado o “new” no método Retire(), também funcionará como um novo método, mas ele informará num warning na hora da compilação que há algo errado. Segundo informações, ele entenderá como ride e não override nesta situação.

class Manager : Employee
{
    protected override void DoWork()
    {
       base.DoWork();
    }

    protected new void Retire()
    {
    }
}

Na classe Principal, abaixo, o método DoWork() faz override do método da classe que herdou e com isso prograga o método
sobrescritro de forma correta.

class Principal : Manager
{
    protected override void DoWork()
    {
       base.DoWork();
    }
}

fonte: https://mastigado.wordpress.com

Sobre Mastigado
Sou um daqueles que precisa mudar o mundo.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: