homelinksBlijf op de hoogte van de recente aanpassingen op vbvoorbeelden!
Visual Basic 2010 Voorbeelden

visual basic 2010 broncode voorbeelden

Microsoft Visual Studio 2010Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

20.1. Abstracte Basis Klassen - MustInherit

Print Email Deel op Facebook Deel op Twitter

Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Van klassen die met het MustInherit keyword zijn gemarkeerd is overerving als het ware verplicht.  "Verplicht" is het in de zin dat je geen instantie kan creëren van dergelijke abstracte klasse, maar je slecht iets kan doen met de members van die abstracte klasse indien je van die klasse gaat overerven.  Het is enkel mogelijk om instanties te creëren van concreet ( dus niet abstracte ) afgeleide types van dit abstracte type.

Dergelijke constructie is dus nuttig in geval van een generalisatietype die zelf een eerder abstract concept omschrijft waarvan zelf geen objecten gemaakt moeten worden.  Het zal uiteraard enkel nuttig zijn wanneer men beschikt over een concreet afgeleid type.

In een systeem hebben we bijvoorbeeld nood aan figuren als rechthoeken en cirkels.  Alle soorten van figuren hebben een bepaalde kleur.  Een generalisatietype als Figure met de gemeenschappelijke kenmerken ( zoals Color ) en gemeenschappelijk gedrag voor alle figuren zou hier dus nuttig zijn.
Maar omdat er in ons systeem niet zoiets is als "een gewone figuur", maar het altijd om specifieke soorten van figuren gaat, kunnen we beter de Figure klasse abstract ( MustInherit ) maken.  Dit voorkomt dat we in een client objecten van dit type zouden maken.  Onderstaande regel (1) kan dus niet en zou een compileerfout veroorzaken.
Visual Basic 2010 Broncode
MustInherit Class Figure
    Private m_Color As String
    Public Property Color() As String
        Get
            Color = m_Color
        End Get
        Set(ByVal value As String)
            m_Color = value
        End Set
    End Property
End Class
Class Rectangle : Inherits Figure
    Private m_Height As Double
    Public Property Height() As Double
        Get
            Height = m_Height
        End Get
        Set(ByVal value As Double)
            m_Height = value
        End Set
    End Property
    Private m_Width As Double
    Public Property Width() As Double
        Get
            Width = m_Width
        End Get
        Set(ByVal value As Double)
            m_Width = value
        End Set
    End Property
End Class
Class Circle : Inherits Figure
    Private m_Radius As Double
    Public Property Radius() As Double
        Get
            Radius = m_Radius
        End Get
        Set(ByVal value As Double)
            m_Radius = value
        End Set
    End Property
End Class
Class Example
    Public Shared Sub Main()
        Dim rectangle1 As Rectangle = New Rectangle
        Dim circle1 As Circle = New Circle
        'Dim figure1 As Figure = New Figure                                ' (1)
    End Sub
End Class
Aan de overgeërfde eigenschap Color kunnen in de gespecialiseerde types nog gespecialiseerde eigenschappen als Height, Width of Radius bijvoorbeeld worden toegevoegd.

Abstracte klassen kunnen ook worden overgeërfd door andere abstracte klassen.  Maar ook met deze afgeleide abstracte klassen zul je weinig zijn zolang je daarvan geen concrete klassen laat overerven.
Een klasse die niet geïnstantieerd kan worden is uiteraard slechts nuttig door de members ervan over te nemen in een concreet afgeleid type waarvan je wel een instantie kunt creëren.

Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.