Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    • Por que escalar escrita é tão mais difícil do que escalar leitura?
    • MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples
    • Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Asp.net»C#»Diferenças entre Override e Shadowing com C#

    Diferenças entre Override e Shadowing com C#

    Jhonathan SoaresBy Jhonathan Soares10 de dezembro de 20193 Mins Read C#
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    A substituição de método é um recurso importante do OOP que permite reescrever uma função ou método de classe base com uma definição diferente. A substituição também é conhecida como “polimorfismo dinâmico” porque a substituição é resolvida no tempo de execução. Aqui a assinatura do método ou função deve ser a mesma. Já quando falamos de método sombra ou shadow method, um método ou função da classe base está disponível para a classe filho (derivada) sem o uso da palavra-chave “override”.

    Isto é, o compilador oculta a função ou método da classe base. Esse conceito é conhecido como sombreamento ou ocultação de método. Na sombra ou ocultação do método, a classe derivada (child) tem sua própria versão da função, a mesma função também está disponível na classe base. De uma forma resumida a técnica shadow permite que eu tenha dois métodos com a mesma assinatura, utilizando herança de classes, porém podendo escolher qual implementação eu irei utilizar, se é da classe filha ou da classe mãe.

    Em relação aos exemplos e explicação sobre override, você pode acompanhar em: Diferenças entre Overload e Override com c# . Porém irei colocar um breve exemplo aqui:


     
     //Overriding
    public class teste
    {
            public virtual void obtemInfo(int id)
            {
                //Obtem info padrão
            }
    }
    
    public class teste2 : teste
    {
            public override void obtemInfo(int id)
            {
                //base.obtemInfo(id);
                //ou - Obtem info em uma nova implementação
            }
    }

    Veja agora um exemplo do mesmo código acima, utilizando a técnica shadow:


     
     //Overriding
    public class teste
    {
            public virtual void obtemInfo(int id)
            {
                //Obtem info padrão
            }
    }
    
    public class teste2 : teste
    {
            public new void obtemInfo(int id)
            {
                //base.obtemInfo(id);
                //ou - Obtem info em uma nova implementação
            }
    }
    
    //program.cs
    
    static void Main(string[] args)  
    {  
        var a = new teste();  
        var b = new teste2();
        
        Console.WriteLine(a.obtemInfo()); 
        Console.WriteLine(b.obtemInfo());  
    }  
    
    

    Sombreamento versus substituição

    Shadow Override
    Shadowing é um conceito muito famoso em VB.Net. Também conhecido como método oculto em C#. Usando esse conceito, podemos fornecer uma nova implementação para o método da classe base sem substituí-lo. A substituição nos permite reescrever uma função de classe base com uma definição diferente.
    Usando a palavra-chave “new”, podemos fazer a sombra ou ocultar o método. O C# usa a palavra-chave virtual / abstract e override para substituir o método.
    A sombra redefine um método ou função inteira. A substituição redefine apenas a implementação de um método ou função.
    Nós podemos mudar o modificador de acesso. Não podemos alterar o modificador de acesso. O modificador de acesso deve ser o mesmo que no método ou função da classe base.
    Não há controle de uma classe base no sombreamento. Em outras palavras, um elemento de classe base não pode impor ou parar de sombreamento. A classe base tem algum controle sobre a substituição. Usando a palavra-chave abstract, a classe base força a classe child (derivada) a implementar a função ou o método.
    Na sombra, a assinatura de um elemento pode ser diferente. Na substituição, a assinatura do elemento deve ser a mesma.


    Espero que você tenha entendo um pouco mais sobre OOP com c#. Caso você queira brincar com shadow e override, você pode acessar este fiddle aqui.

    Um abraço a todos! 🙂

    Fontes: https://stackoverflow.com/questions/392721/difference-between-shadowing-and-overriding-in-c

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    O que é a Ecma e qual é sua relação com C#?

    C# Post do Leitor 29 de julho de 20247 Mins Read

    UUID vs ULID: comparação e exemplos em C#

    C# 19 de junho de 20245 Mins Read

    Entendendo o ObjectId no MongoDB

    C# NoSql 25 de maio de 20246 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    Categorias
    • Arquitetura (14)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (90)
      • NoSql (58)
      • Sql (38)
    • Boas práticas (29)
      • Gestão & Produtividade (1)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (1)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile