MustInherit (Visual Basic)
Spécifie qu’une classe ne peut être utilisée que comme classe de base, et que vous ne pouvez pas créer d’objet directement à partir de celle-ci.
Notes
L’objectif d’une classe de base (également appelée classe abstraite) est de définir des fonctionnalités communes à toutes les classes qui en sont dérivées. Cela évite aux classes dérivées d’avoir à redéfinir les éléments communs. Dans certains cas, cette fonctionnalité courante n’est pas suffisante pour rendre un objet utilisable, et chaque classe dérivée définit les fonctionnalités manquantes. Dans ce cas, vous souhaitez que le code consommateur crée des objets uniquement à partir des classes dérivées. Vous utilisez MustInherit
sur la classe de base pour appliquer cela.
Une autre utilisation d’une classe MustInherit
consiste à restreindre une variable à un ensemble de classes associées. Vous pouvez définir une classe de base et en dériver toutes les classes qui y sont associées. La classe de base n’a pas besoin de fournir de fonctionnalités communes à toutes les classes dérivées, mais elle peut servir de filtre pour attribuer des valeurs à des variables. Si votre code consommateur déclare une variable comme classe de base, Visual Basic vous permet d’attribuer un seul objet d’une des classes dérivées à cette variable.
Le .NET Framework définit plusieurs classes MustInherit
, dont Array, Enum et ValueType. ValueType est un exemple de classe de base qui limite une variable. Tous les types de valeur dérivent de ValueType. Si vous déclarez une variable en tant que ValueType, vous pouvez attribuer uniquement des types de valeur à cette variable.
Règles
Contexte de déclaration. Vous ne pouvez utiliser
MustInherit
que dans une instructionClass
.Modificateurs combinés. Vous ne pouvez pas spécifier
MustInherit
avecNotInheritable
dans la même déclaration.
Exemple
L’exemple suivant illustre à la fois l’héritage forcé et le remplacement forcé. La classe de base shape
définit une variable acrossLine
. Les classes circle
et square
dérivent de shape
. Elles héritent de la définition de acrossLine
, mais elles doivent définir la fonction area
, car ce calcul est différent pour chaque type de forme.
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
Vous pouvez déclarer shape1
et shape2
pour qu’elles soient de type shape
. Toutefois, vous ne pouvez pas créer un objet à partir de shape
, car il ne dispose pas des fonctionnalités de la fonction area
et est marqué MustInherit
.
Étant donné qu’elles sont déclarées comme shape
, les variables shape1
et shape2
sont limitées aux objets des classes dérivées circle
et square
. Visual Basic ne vous permet pas d’attribuer d’autres objets à ces variables, ce qui vous donne un niveau élevé de cohérence des types.
Utilisation
Le modificateur MustInherit
peut être utilisé dans ce contexte :