MustInherit (Visual Basic)
Hiermee geeft u op dat een klasse alleen als basisklasse kan worden gebruikt en dat u er geen object rechtstreeks van kunt maken.
Opmerkingen
Het doel van een basisklasse (ook wel een abstracte klasse genoemd) is het definiëren van functionaliteit die gebruikelijk is voor alle klassen die ermee zijn afgeleid. Hierdoor hoeven de afgeleide klassen niet de algemene elementen opnieuw te definiëren. In sommige gevallen is deze algemene functionaliteit niet volledig genoeg om een bruikbaar object te maken en definieert elke afgeleide klasse de ontbrekende functionaliteit. In dat geval wilt u dat de verbruikende code alleen objecten maakt op basis van de afgeleide klassen. U gebruikt MustInherit
de basisklasse om dit af te dwingen.
Een ander gebruik van een klasse is het beperken van een MustInherit
variabele tot een set gerelateerde klassen. U kunt een basisklasse definiëren en al deze gerelateerde klassen ervan afleiden. De basisklasse hoeft geen functionaliteit te bieden die gebruikelijk is voor alle afgeleide klassen, maar kan fungeren als filter voor het toewijzen van waarden aan variabelen. Als uw verbruikende code een variabele declareert als basisklasse, kunt u met Visual Basic slechts een object uit een van de afgeleide klassen toewijzen aan die variabele.
Het .NET Framework definieert verschillende MustInherit
klassen, waaronder Array, Enumen ValueType. ValueType is een voorbeeld van een basisklasse die een variabele beperkt. Alle waardetypen zijn afgeleid van ValueType. Als u een variabele declareert als ValueType, kunt u alleen waardetypen toewijzen aan die variabele.
Regels
Declaratiecontext. U kunt alleen in een
Class
instructie gebruikenMustInherit
.Gecombineerde modifiers. U kunt niet samen met
NotInheritable
dezelfde declaratie opgevenMustInherit
.
Opmerking
In het volgende voorbeeld ziet u zowel geforceerde overname als geforceerd overschrijven. De basisklasse shape
definieert een variabele acrossLine
. De klassen circle
en square
afgeleid van shape
. Ze nemen de definitie over van acrossLine
, maar ze moeten de functie area
definiëren omdat die berekening verschilt voor elk type vorm.
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
U kunt declareren shape1
en shape2
van het type shape
zijn. U kunt echter geen object shape
maken van waaruit het niet beschikt over de functionaliteit van de functie area
en is gemarkeerd MustInherit
.
Omdat ze worden gedeclareerd als shape
, worden de variabelen shape1
en shape2
beperkt tot objecten uit de afgeleide klassen circle
en square
. Visual Basic staat u niet toe om andere objecten toe te wijzen aan deze variabelen, waardoor u een hoog niveau van typeveiligheid krijgt.
Gebruik
De MustInherit
wijzigingsfunctie kan in deze context worden gebruikt: