MustInherit (Visual Basic)
Określa, że klasa może być używana tylko jako klasa bazowa i że nie można utworzyć obiektu bezpośrednio z niej.
Uwagi
Celem klasy bazowej (znanej również jako klasa abstrakcyjna) jest zdefiniowanie funkcji wspólnych dla wszystkich klas pochodnych. Dzięki temu klasy pochodne nie muszą ponownie definiować wspólnych elementów. W niektórych przypadkach ta typowa funkcjonalność nie jest wystarczająca do utworzenia obiektu użytecznego, a każda klasa pochodna definiuje brakujące funkcje. W takim przypadku chcesz, aby kod zużywany tworzył obiekty tylko z klas pochodnych. Aby wymusić to, użyj polecenia MustInherit
w klasie bazowej.
Innym zastosowaniem MustInherit
klasy jest ograniczenie zmiennej do zestawu powiązanych klas. Można zdefiniować klasę bazową i utworzyć z niej wszystkie powiązane klasy. Klasa bazowa nie musi udostępniać żadnych funkcji wspólnych dla wszystkich klas pochodnych, ale może służyć jako filtr do przypisywania wartości do zmiennych. Jeśli kod zużywający deklaruje zmienną jako klasę bazową, program Visual Basic umożliwia przypisanie tylko obiektu z jednej z klas pochodnych do tej zmiennej.
Program .NET Framework definiuje kilka MustInherit
klas, między innymi Array, Enumi ValueType. ValueType to przykład klasy bazowej, która ogranicza zmienną. Wszystkie typy wartości pochodzą z klasy ValueType. Jeśli zadeklarujesz zmienną jako ValueType, możesz przypisać tylko typy wartości do tej zmiennej.
Reguły
Kontekst deklaracji. Można użyć
MustInherit
tylko w instrukcjiClass
.Modyfikatory połączone. Nie można określić
MustInherit
razem zNotInheritable
tą samą deklaracją.
Przykład
Poniższy przykład ilustruje zarówno wymuszone dziedziczenie, jak i wymuszone zastępowanie. Klasa shape
bazowa definiuje zmienną acrossLine
. Klasy circle
i square
pochodzą z klasy shape
. Dziedziczą definicję acrossLine
elementu , ale muszą zdefiniować funkcję area
, ponieważ to obliczenie jest inne dla każdego rodzaju kształtu.
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
Można zadeklarować shape1
i shape2
mieć typ shape
. Nie można jednak utworzyć obiektu na podstawie shape
, ponieważ brakuje mu funkcji area
i jest oznaczony jako MustInherit
.
Ponieważ są deklarowane jako shape
, zmienne shape1
i shape2
są ograniczone do obiektów z klas circle
pochodnych i square
. Język Visual Basic nie umożliwia przypisania żadnego innego obiektu do tych zmiennych, co zapewnia wysoki poziom bezpieczeństwa typów.
Użycie
Modyfikator MustInherit
może być używany w tym kontekście: