Partilhar via


Diferenças entre Sombreamento e Sobrescrição

Quando você define uma classe que herda de uma classe base, você às vezes quer redefinir um ou mais elementos da classe base na classe derivada.Sombreamento e sobrescrição estão disponíveis para esse propósito.

Comparação

É fácil confundir sombreamento com sobrescrição.Os dois são usados quando uma classe derivada herda de uma classe base, e os dois redefinem um elemento declarado com outro.Mas existem diferenças significantes entre os dois.

A seguinte tabela compara sombreamento com sobrescrição.

Ponto de comparação

Sombreamento

Substituição

Objetivo

Protege contra uma mudança subsequente na classe base que introduz um membro que você já definiu na classe base.

Permite polimorfismo através da definição de uma implementação de um procedimento ou propriedade com a mesma sequência de chamada 1.

Elemento redefinido

Qualquer tipo de elemento declarado

Somente um procedimento (Function, Sub, ou Operator) ou propriedade

Elemento redefinido

Qualquer tipo de elemento declarado

Somente um procedimento ou propriedade com uma sequência de chamada idêntica 1

Nível de acesso do elemento redefinido

Qualquer nível de acesso

Não pode mudar o nível de acesso do elemento sobrescrito

Legibilidade de gravabilidade do elemento redefinido

Qualquer combinação

Não pode mudar a legibilidade ou gravabilidade de propriedades sobrescritas

Controle da redefinição

O elemento da classe base não pode forçar ou proibir sombreamento

Elemnto da classe base pode especificar MustOverride, NotOverridable, ou Overridable

Uso de palavras chave

Shadows recomendado na classe derivada, Shadows assumido se Shadows nem Overrides estão especificados 2.

Overridable ou MustOverride necessário na classe base Overrides necessário na classe derivada

Herança do elemento redefinido em classes derivadas da classe derivada

Elememento sombreante herdado por classes derivadas posteriores; elemento sombreado ainda escondido 3

Elemento sobrescritor herdado por futuras classes derivadas; elemento sobrescrito ainda sobrescrito

1 A sequência de chamada consiste do tipo de elemento(Function, Sub, Operator, ou Property), nome, listas de parâmetros e tipo da saída.Você não pode sobrescrever um procedimento com uma propriedade, ou o contrário.Você não pode sobrescrever nenhum tipo de procedimento (Function, Sub, ou Operator) com outro tipo.

2 Se você não especificar ou Shadows ou Overrides, o compilador envia uma mensagem de aviso para ajudá-lo a ter certeza de qual redefinição deseja usar.Se você ignorar o aviso, o mecanismo de sombreamento é usado.

3 Se o elemento sombreador é inacessível numa futura classe derivada, sombreamento não é herdado.Por exemplo, se você declarar o elemento sombreador como Private, uma classe derivando de sua classe derivada herda ou elemento original em vez do elemento sombreador.

Diretrizes

Você normalmente usa sobrescrição nos seguintes casos:

  • Você está definindo classes derivadas polimórficas.

  • Você deseja a segurança de fazer o compilador forçar o mesmo tipo de elemento e sequência de chamada.

Você normalmente usa sombreamento nos seguintes casos:

  • Você antecipa que sua classe base pode ser modificada e definir um elemento usando o mesmo nome que o seu.

  • Você deseja a liberdade de mudar o tipo de elemento ou sequência de chamada.

Consulte também

Tarefas

Como: Distinguir entre dois elementos com o mesmo nome

Como: Ocultar uma variável com o mesmo nome sistema autônomo a variável

Como: Ocultar uma variável herdada

Como: Acessar uma variável oculto por uma classe derivada

Conceitos

Resolvendo uma Referência Quando Várias Variáveis Têm o Mesmo Nome

Sombreamento em Visual Basic

Referência

Sombras

Substitui

Outros recursos

Referências aos elementos declaradas