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

9.6. Publieke Members Benaderen

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.

Indien men in een bepaalde implementatie zowel een ingekapseld veld als een publieke member kan gebruiken om een bepaalde waarde van een object aan te spreken, valt het doorgaans aan te raden deze waarde via de publieke member te benaderen.

Deze publieke member garandeert immers - althans zolang de abstractie van de klasse ongewijzigd blijft - steeds dezelfde waarde op te leveren.

Stel dat we bij het opvragen van de Tax van een Product een percentage wensen te ontvangen :
Visual Basic 2010 Broncode
Namespace Example1
    Module Client
        Public Sub Main()
            Dim product1 As New Product
            product1.Price = 1000
            product1.Tax = 21
            '
            Console.WriteLine(product1.Tax = 21)
            Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
            '
            Console.ReadLine()
        End Sub
    End Module
End Namespace
Console Application Output
True
True
Dan kunnen we bijvoorbeeld deze ingestelde Tax waarde rechtstreeks in het m_Tax veld bewaren :
Visual Basic 2010 Broncode
Namespace Example1
    Class Product
        Private m_Price As Decimal
        Public Property Price() As Decimal
            Get
                Price = m_Price
            End Get
            Set(ByVal value As Decimal)
                m_Price = value
            End Set
        End Property
        Private m_Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = m_Tax
            End Get
            Set(ByVal value As Decimal)
                m_Tax = value
            End Set
        End Property
    End Class
End Namespace
Indien we in een GetPriceIncludingTax implementatie de taxwaarde wensen te gebruiken kunnen we deze waarde zowel via Tax als m_Tax deze waarde benaderen.

Toch valt in dergelijke gevallen aan te raden de publieke member te gebruiken om dergelijke waarde aan te spreken.  Van Tax zijn we immer zeker dat het steeds dezelfde waarde zal opleveren.  We hebben immers in de abstractie vastgelegd dat indien we deze waarde opvragen we het percentage wensen te ontvangen.
Visual Basic 2010 Broncode
Namespace Example1
    Partial Class Product
        Public Function GetPriceIncludingTax() As Decimal
            GetPriceIncludingTax = Price * (1 + (Tax / 100))
        End Function
    End Class
End Namespace
Van m_Tax zijn we echter niet zo zeker, momenteel zal deze dezelfde waarde representeren :
Visual Basic 2010 Broncode
Namespace Example2
    Class Product
        Private m_Price As Decimal
        Public Property Price() As Decimal
            Get
                Price = m_Price
            End Get
            Set(ByVal value As Decimal)
                m_Price = value
            End Set
        End Property
        Private m_Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = m_Tax
            End Get
            Set(ByVal value As Decimal)
                m_Tax = value
            End Set
        End Property
        Public Function GetPriceIncludingTax() As Decimal
            GetPriceIncludingTax = Price * (1 + (m_Tax / 100))
        End Function
    End Class
    Module Client
        Public Sub Main()
            Dim product1 As New Product
            product1.Price = 1000
            product1.Tax = 21
            '
            Console.WriteLine(product1.Tax = 21)
            Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
            '
            Console.ReadLine()
        End Sub
    End Module
End Namespace
Console Application Output
True
True
We kunnen echter op eender welk moment de implementatie van de property Tax veranderen, en dit zonder de abstractie van het type Product aan te tasten.

We zouden bijvoorbeeld in plaats van het percentage, het effectieve taxbedrag kunnen bewaren :
Visual Basic 2010 Broncode
Namespace Example3
    Class Product
        Private m_Price As Decimal
        Public Property Price() As Decimal
            Get
                Price = m_Price
            End Get
            Set(ByVal value As Decimal)
                m_Price = value
            End Set
        End Property
        Private m_Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = (m_Tax / Price) * 100
            End Get
            Set(ByVal value As Decimal)
                m_Tax = Price * (value / 100)
            End Set
        End Property
    End Class
End Namespace
Indien we de implementatie van GetPriceIncludingTax niet aanpassen, krijgen we een foutief resultaat :
Visual Basic 2010 Broncode
Namespace Example3
    Partial Class Product
        Public Function GetPriceIncludingTax() As Decimal
            GetPriceIncludingTax = Price * (1 + (m_Tax / 100))
        End Function
    End Class
    Module Client
        Public Sub Main()
            Dim product1 As New Product
            product1.Price = 1000
            product1.Tax = 21
            '
            Console.WriteLine(product1.Tax = 21)
            Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
            '
            Console.ReadLine()
        End Sub
    End Module
End Namespace
Console Application Output
True
False
Indien we in de implementatie van GetPriceIncludingTax toch gewoon de publieke property Tax uitlezen, hebben we geen enkel probleem :
Visual Basic 2010 Broncode
Namespace Example4
    Class Product
        Private m_Price As Decimal
        Public Property Price() As Decimal
            Get
                Price = m_Price
            End Get
            Set(ByVal value As Decimal)
                m_Price = value
            End Set
        End Property
        Private m_Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = (m_Tax / Price) * 100
            End Get
            Set(ByVal value As Decimal)
                m_Tax = Price * (value / 100)
            End Set
        End Property
        Public Function GetPriceIncludingTax() As Decimal
            GetPriceIncludingTax = Price * (1 + (Tax / 100))
        End Function
    End Class
    Module Client
        Public Sub Main()
            Dim product1 As New Product
            product1.Price = 1000
            product1.Tax = 21
            '
            Console.WriteLine(product1.Tax = 21)
            Console.WriteLine(product1.GetPriceIncludingTax() = 1210)
            '
            Console.ReadLine()
        End Sub
    End Module
End Namespace
Console Application Output
True
True

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