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

13.3. Fysieke Gelijkheid

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.

13.3.1. Is Operator

Indien je gelijkheid tussen verschillen instanties wil nagaan, moet je een onderscheid maken tussen fysieke en logische gelijkheid.

Twee objectvariabelen zijn fysiek gelijk aan elkaar als ze beiden wijzen naar hetzelfde object (naar dezelfde plaats in het geheugen).

Met de Is operator kan je testen op fysieke gelijkheid van objecten ( instanties van referencetypes), met andere woorden : gaat het om hetzelfde object.  Hiermee wordt dus gewoon de referenties met elkaar vergeleken.
Visual Basic 2012 Broncode - Codevoorbeeld 349
Option Strict On
Option Explicit On
Class Person
    Public Property Name As String
End Class
Class Client1
    Public Shared Sub Main()
        Dim person1 As Person = New Person With {.Name = "John"}
        Dim person2 As Person = New Person With {.Name = "Jane"}
        Dim person3 As Person = person1
        '
        Console.WriteLine(person1 Is person2)
        Console.WriteLine(person1 Is person3)
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
False
True

13.3.2. Object.ReferenceEquals Method

Een alternatief voor de Is operator is het gebruik van de Shared Function ReferenceEquals(ByVal objA As Object, ByVal objB As Object) As Boolean uit de System.Object klasse.
Deze zal van beide parameters nagaan of ze naar hetzelfde object verwijzen.
Visual Basic 2012 Broncode - Codevoorbeeld 350
Class Client2
    Public Shared Sub Main()
        Dim person1 As Person = New Person With {.Name = "John"}
        Dim person2 As Person = New Person With {.Name = "Jane"}
        Dim person3 As Person = person1
        '
        Console.WriteLine(Object.ReferenceEquals(person1, person2))
        Console.WriteLine(Object.ReferenceEquals(person1, person3))
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
False
True

13.3.3. Vergelijken met Nothing

Indien men wil nagaan of een objectvariabele wel een referentie bevat, kan men zowel bij de Is operator, als de ReferenceEquals method met Nothing vergelijken.
Visual Basic 2012 Broncode - Codevoorbeeld 351
Class Client3
    Public Shared Sub Main()
        Dim person1 As Person = New Person With {.Name = "John"}
        Dim person2 As Person
        '
        Console.WriteLine(person1 Is Nothing)
        Console.WriteLine(person2 Is Nothing)
        Console.WriteLine(Object.ReferenceEquals(person1, Nothing))
        Console.WriteLine(Object.ReferenceEquals(person2, Nothing))
        Console.WriteLine(Nothing Is Nothing)
        Console.WriteLine(Object.ReferenceEquals(Nothing, Nothing))
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
False
True
False
True
True
True

13.3.4. Fysieke Gelijkheid tussen Value Types

Fysieke gelijkheid nagaan tussen twee valuetype instanties is onzinnig.  Elke valuetype variabele is immers ge-associeerd met zijn eigen valuetype instantie.  Twee valuetype variabelen kunnen bijgevolg ook nooit naar dezelfde instantie verwijzen.

De Is operator is dan niet bruikbaar bij valuetype instanties (1), de compiler verhindert dergelijk gebruik (1).

De ReferenceEquals method voor valuetype argumenten zal steeds False opleveren, zelfs indien men twee maal dezelfde valuetype argumentwaarde gebruikt (2) :
Visual Basic 2012 Broncode - Codevoorbeeld 352
Class Client4
    Public Shared Sub Main()
        Dim value1 As Integer = 5
        Dim value2 As Integer = value1
        'Console.WriteLine(value1 Is value2)                               ' (1)
        Console.WriteLine(Object.ReferenceEquals(value1, value1))          ' (2)
        Console.WriteLine(Object.ReferenceEquals(value1, value2))
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
False
False

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.