Condividi tramite


MustInherit (Visual Basic)

Specifica che una classe può essere usata solo come classe di base e che non è possibile creare un oggetto direttamente da tale classe.

Osservazioni:

Lo scopo di una classe base (nota anche come classe astratta) è definire funzionalità comuni a tutte le classi derivate da essa. In questo modo le classi derivate non devono ridefinire gli elementi comuni. In alcuni casi, questa funzionalità comune non è sufficiente per rendere utilizzabile un oggetto e ogni classe derivata definisce la funzionalità mancante. In tal caso, si vuole che il codice che utilizza solo le classi derivate crei oggetti. Per applicare questa operazione, usare MustInherit nella classe di base.

Un altro uso di una classe MustInherit consiste nel limitare una variabile a un set di classi correlate. È possibile definire una classe di base e derivare tutte queste classi correlate. La classe base non deve fornire alcuna funzionalità comune a tutte le classi derivate, ma può fungere da filtro per l'assegnazione di valori alle variabili. Se il codice di utilizzo dichiara una variabile come classe di base, Visual Basic consente di assegnare solo un oggetto da una delle classi derivate a tale variabile.

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

Regole

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

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

Esempio

L'esempio seguente illustra sia l'ereditarietà forzata che l'override forzato. La classe di 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 perché tale calcolo è diverso per ogni 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 shape1 e shape2 come tipo shape. Tuttavia, non è possibile creare un oggetto da shape perché non dispone della funzionalità della funzione area ed è contrassegnato come MustInherit.

Poiché vengono dichiarate come shape, le variabili shape1 e shape2 sono limitate agli oggetti dalle classi derivate circle e square. Visual Basic non consente di assegnare altri oggetti a queste variabili, il che offre un livello elevato di sicurezza dei tipi.

Utilizzo

Il modificatore MustInherit può essere usato in questo contesto:

Istruzione Class

Vedi anche