Condividi tramite


MustInherit

Aggiornamento: novembre 2007

Specifica che una classe può essere utilizzata solo come classe base da cui non è possibile creare direttamente un oggetto.

Note

Lo scopo di una classe base, nota anche come classe astratta, è di definire la funzionalità comune a tutte le classi da essa derivate, con il vantaggio per le classi derivate di non dover ridefinire gli elementi comuni. In alcuni casi la funzionalità condivisa non è sufficientemente completa da creare un oggetto utilizzabile e ogni classe derivata definisce la funzionalità mancante. In una situazione del genere il codice utilizzato deve creare oggetti solo dalle classi derivate. Utilizzare MustInherit sulla classe base per attivare la procedura.

Un altro impiego di una classe MustInherit consiste nel limitare una variabile a un insieme di classi correlate. È possibile definire una classe base da cui derivare tutte le classi correlate. La classe base non deve fornire alcuna funzionalità comune a tutte le classi derivate, ma può essere utilizzata come filtro per l'assegnazione di valori alle variabili. Se il codice utilizzato dichiara una variabile come classe base, in Visual Basic sarà possibile assegnare alla variabile solo un oggetto di una delle classi derivate.

In .NET Framework vengono definite diverse classi MustInherit, tra cui Array, Enum e ValueType. ValueType è un esempio di classe base che limita una variabile. Tutti i tipi di valore derivano da ValueType. Se si dichiara una variabile come ValueType, è possibile assegnare solo tipi di valore a quella variabile.

Regole

  • Contesto della dichiarazione. È possibile utilizzare MustInherit solo in un'istruzione Class.

  • Modificatori combinati. Non è possibile specificare MustInherit insieme a NotInheritable nella stessa dichiarazione.

Esempio

Nell'esempio riportato di seguito vengono illustrati l'ereditarietà forzata e l'override forzato. La classe base shape definisce una variabile acrossLine. Le classi circle e square derivano da shape. Ereditano la definizione di acrossLine, ma devono definire la funzione area in quanto il calcolo varia in base al tipo di forma.

Public MustInherit Class shape
    Public acrossLine As Double
    Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
    Public Overrides Function area() As Double
        Return Math.PI * acrossLine
    End Function
End Class
Public Class square : Inherits shape
    Public Overrides Function area() As Double
        Return acrossLine * acrossLine
    End Function
End Class
Public Class consumeShapes
    Public Sub makeShapes()
        Dim shape1, shape2 As shape
        shape1 = New circle
        shape2 = New square
    End Sub
End Class

È possibile dichiarare le variabili shape1 e shape2 di tipo shape. Non è tuttavia possibile creare un oggetto da shape in quanto non dispone della funzionalità della funzione area ed è contrassegnato con MustInherit.

Dal momento che sono dichiarate come shape, le variabili shape1 e shape2 sono limitate a oggetti delle classi derivate circle e square. In Visual Basic non è consentita l'assegnazione di qualsiasi altro oggetto a tali variabili, con evidenti vantaggi in termini di indipendenza dai tipi.

Utilizzo

Il modificatore MustInherit può essere utilizzato in questo contesto:

Istruzione Class

Vedere anche

Riferimenti

Istruzione Inherits

NotInheritable

Parole chiave del linguaggio Visual Basic

Altre risorse

Ereditarietà in Visual Basic