homeboekenlinksledenabonneer je :Blijf op de hoogte door je te abonneren op de vbvoorbeelden RSS Niews Feed!Blijf op de hoogte door vbvoorbeelden te volgen op Twitter!Blijf op de hoogte door fan te worden van vbvoorbeelden op Facebook!
Visual Basic 2008 en 2010 Voorbeelden en Boeken Microsoft Visual Studio 2010Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

visual basic 2008 voorbeelden en boeken / visual basic 2010 voorbeelden en boeken

9.4. Publieke Members Benaderen

Print Email Deel op FacebookDeel op TwitterDeel op DiggBookmark op Google BookmarksDeel op del.icio.usOverige Sociale Netwerksites...

Dit artikel is gepubliceerd op woensdag 28 april 2010 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 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
Visual Basic Output
True
True
Dan kunnen we bijvoorbeeld deze ingestelde Tax waarde rechtstreeks in het m_Tax veld bewaren :
Visual Basic 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 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 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
Visual Basic 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 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 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
Visual Basic Output
True
False
Indien we in de implementatie van GetPriceIncludingTax toch gewoon de publieke property Tax uitlezen, hebben we geen enkel probleem :
Visual Basic 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
Visual Basic Output
True
True

Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Visual Basic 2008 & 2010 Boeken

Het Groene Visual Basic 2008 & 2010 Voorbeelden Boek Het Blauwe Visual Basic 2008 & 2010 Voorbeelden Boek Het Rode Visual Basic 2008 & 2010 Voorbeelden Boek

Bevalt een artikel je, dan kan je de inhoud van vbvoorbeelden ook reclamevrij in boekvorm verkrijgen.

De inhoud is verdeeld over 3 boeken, Het Groene, Het Blauwe en Het Rode Visual Basic 2008 & 2010 Voorbeelden Boek.

Klik hier voor meer informatie.

Berichten

Fast UML Sequence Diagram Editor