Condividi tramite


Differenze tra shadowing e override (Visual Basic)

Quando si definisce una classe che eredita da una classe base, talvolta è necessario ridefinire uno o più elementi della classe base nella classe derivata.A questo scopo è possibile utilizzare sia lo shadowing che l'override.

Confronto

Sia lo shadowing che l'override vengono utilizzati quando una classe derivata eredita da una classe di base ed entrambi consentono di ridefinire un elemento dichiarato con un altro.Esistono tuttavia differenze significative tra queste due tecniche.

Nella seguente tabella vengono illustrate le differenze tra lo shadowing e l'override.

Elemento di confronto

Shadowing

Override

Scopo

Impedisce le successive modifiche della classe base che introducono un membro già definito nella classe derivata

Applica il polimorfismo mediante la definizione di una diversa implementazione di una routine o di una proprietà con la stessa sequenza di chiamata1

Elemento ridefinito

Qualsiasi tipo di elemento dichiarato

Solo una routine (Function, Sub o Operator) o una proprietà

Elemento di ridefinizione

Qualsiasi tipo di elemento dichiarato

Solo una routine o una proprietà con identica sequenza di chiamata1

Livello di accesso dell'elemento di ridefinizione

Qualsiasi livello di accesso

Non è possibile modificare il livello di accesso dell'elemento sottoposto a override

Leggibilità dell'elemento di ridefinizione e possibilità di apportarvi modifiche

Qualsiasi combinazione

Impossibile modificare la leggibilità o la scrivibilità della proprietà sottoposta a override

Controllo sulla ridefinizione

L'elemento della classe base non può applicare o impedire lo shadowing

L'elemento della classe base può specificare MustOverride, NotOverridable o Overridable

Utilizzo di parole chiave

Shadows consigliata nella classe derivata; si presuppone Shadows se non vengono specificate né Shadows né Overrides2

Overridable o MustOverride obbligatoria nella classe base; Overrides obbligatoria nella classe derivata

Eredità dell'elemento di ridefinizione da parte di classi che derivano dalla classe derivata

Elemento di shadowing ereditato da altre classi derivate; elemento su cui viene eseguito lo shadowing ancora nascosto3

Elemento di override ereditato da altre classi derivate; elemento su cui viene eseguito l'override ancora in override

1 La sequenza di chiamata è costituita da tipo di elemento (Function, Sub, Operator o Property), nome, elenco dei parametri e tipo restituito.Non è possibile eseguire l'override di una routine con una proprietà o viceversa.Non è possibile eseguire l'override di un tipo di routine (Function, Sub o Operator) con un altro tipo.

2 Se non si specifica Shadows o Overrides, il compilatore restituisce un messaggio di avviso in cui viene chiesto di verificare il tipo di ridefinizione che si desidera utilizzare.Se si ignora il messaggio di avviso, verrà utilizzato il meccanismo di shadowing.

3 Se l'elemento di shadowing non risulta accessibile nelle altre classi derivate, lo shadowing non verrà ereditato.Se ad esempio si dichiara l'elemento di shadowing come Private, una classe che deriva dalla classe derivata erediterà l'elemento originale anziché l'elemento di shadowing.

Indicazioni

L'override deve essere in genere utilizzato nei seguenti casi:

  • Durante la definizione di classi derivate polimorfiche.

  • Quando si desidera che il compilatore imponga la stessa sequenza di chiamata e lo stesso tipo di elemento.

Lo shadowing deve essere in genere utilizzato nei seguenti casi:

  • Quando si prevede che la classe base possa essere modificata e si desidera definire un elemento utilizzando lo stesso nome.

  • Quando si desidera avere la possibilità di modificare il tipo di elemento o la sequenza di chiamata.

Vedere anche

Attività

Procedura: nascondere una variabile con lo stesso nome di un'altra variabile (Visual Basic)

Procedura: nascondere una variabile ereditata (Visual Basic)

Procedura: accedere a una variabile nascosta da una classe derivata (Visual Basic)

Riferimenti

Shadows (Visual Basic)

Overrides (Visual Basic)

Concetti

Riferimenti a elementi dichiarati (Visual Basic)

Shadowing in Visual Basic