|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
13.3.1. Is OperatorIndien 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 2010 Broncode Option Strict OnOption Explicit OnClass Person Private m_Name As String Public Property Name() As String Get Name = m_Name End Get Set( ByVal value As String) m_Name = value End Set End PropertyEnd ClassClass 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 SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output False
True boven
13.3.2. Object.ReferenceEquals MethodEen 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 2010 Broncode 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 SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output False
True boven
13.3.3. Vergelijken met NothingIndien 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 2010 Broncode 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 SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output False
True
False
True
True
True boven
13.3.4. Fysieke Gelijkheid tussen Value TypesFysieke 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 2010 Broncode Class Client4 Public Shared Sub Main() Dim value1 As Integer = 5 Dim value2 As Integer = value1 Console.WriteLine( Object.ReferenceEquals(value1, value1)) Console.WriteLine( Object.ReferenceEquals(value1, value2)) Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output False
False
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|