Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

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

9.6. Publieke Members Benaderen

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 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 2012 Broncode - Codevoorbeeld 232
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 _Tax veld bewaren :
Visual Basic 2012 Broncode - Codevoorbeeld 233
Namespace Example1
    Class Product
        Public Property Price As Decimal
        Private _Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = _Tax
            End Get
            Set(ByVal value As Decimal)
                _Tax = value
            End Set
        End Property
       'or: Public Property Tax As Decimal
    End Class
End Namespace
Indien we in een GetPriceIncludingTax implementatie de taxwaarde wensen te gebruiken kunnen we deze waarde zowel via Tax als _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 2012 Broncode - Codevoorbeeld 234
Namespace Example1
    Partial Class Product
        Public Function GetPriceIncludingTax() As Decimal
            GetPriceIncludingTax = Price * (1 + (Tax / 100))
        End Function
    End Class
End Namespace
Van _Tax zijn we echter niet zo zeker, momenteel zal deze dezelfde waarde representeren :
Visual Basic 2012 Broncode - Codevoorbeeld 235
Namespace Example2
    Class Product
        Public Property Price As Decimal
        Private _Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = _Tax
            End Get
            Set(ByVal value As Decimal)
                _Tax = value
            End Set
        End Property
       'or: Public Property Tax As Decimal
        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
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 2012 Broncode - Codevoorbeeld 236
Namespace Example3
    Class Product
        Public Property Price As Decimal
        Private _Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = (_Tax / Price) * 100
            End Get
            Set(ByVal value As Decimal)
                _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 2012 Broncode - Codevoorbeeld 237
Namespace Example3
    Partial Class Product
        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
False
Indien we in de implementatie van GetPriceIncludingTax toch gewoon de publieke property Tax uitlezen, hebben we geen enkel probleem :
Visual Basic 2012 Broncode - Codevoorbeeld 238
Namespace Example4
    Class Product
        Public Property Price As Decimal
        Private _Tax As Decimal
        Public Property Tax() As Decimal
            Get
                Tax = (_Tax / Price) * 100
            End Get
            Set(ByVal value As Decimal)
                _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 maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.