MustInherit (Visual Basic)
Anger att en klass endast kan användas som basklass och att du inte kan skapa ett objekt direkt från den.
Kommentarer
Syftet med en basklass (även kallad abstrakt klass) är att definiera funktioner som är gemensamma för alla klasser som härleds från den. Detta sparar de härledda klasserna från att behöva omdefiniera de gemensamma elementen. I vissa fall är den här vanliga funktionen inte tillräckligt fullständig för att göra ett användbart objekt, och varje härledd klass definierar de funktioner som saknas. I så fall vill du att den förbrukande koden endast ska skapa objekt från de härledda klasserna. Du använder MustInherit
i basklassen för att framtvinga detta.
En annan användning av en MustInherit
klass är att begränsa en variabel till en uppsättning relaterade klasser. Du kan definiera en basklass och härleda alla dessa relaterade klasser från den. Basklassen behöver inte tillhandahålla några funktioner som är gemensamma för alla härledda klasser, men den kan fungera som ett filter för att tilldela värden till variabler. Om din användningskod deklarerar en variabel som basklass kan du med Visual Basic endast tilldela ett objekt från en av de härledda klasserna till variabeln.
.NET Framework definierar flera MustInherit
klasser, bland dem Array, Enumoch ValueType. ValueType är ett exempel på en basklass som begränsar en variabel. Alla värdetyper härleds från ValueType. Om du deklarerar en variabel som ValueTypekan du endast tilldela värdetyper till den variabeln.
Regler
Deklarationskontext. Du kan bara använda
MustInherit
i enClass
-instruktion.Kombinerade modifierare. Du kan inte ange
MustInherit
tillsammans medNotInheritable
i samma deklaration.
Exempel
I följande exempel visas både framtvingat arv och påtvingat åsidosättande. Basklassen shape
definierar en variabel acrossLine
. Klasserna circle
och square
härleds från shape
. De ärver definitionen av acrossLine
, men de måste definiera funktionen area
eftersom den beräkningen skiljer sig åt för varje formtyp.
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
Du kan deklarera shape1
och shape2
vara av typen shape
. Du kan dock inte skapa ett objekt från shape
eftersom det saknar funktionens area
funktioner och är markerad MustInherit
.
Eftersom de deklareras som shape
, är variablerna shape1
och shape2
begränsade till objekt från de härledda klasserna circle
och square
. Visual Basic tillåter inte att du tilldelar något annat objekt till dessa variabler, vilket ger dig en hög typsäkerhetsnivå.
Användning
Modifieraren kan användas i den här kontexten MustInherit
: