Gelijkheidsvergelijkingen (C#-programmeerhandleiding)
Soms is het noodzakelijk om twee waarden voor gelijkheid te vergelijken. In sommige gevallen test u op gelijkheid van waarden, ook wel gelijkwaardigheid genoemd, wat betekent dat de waarden die zijn opgenomen in de twee variabelen gelijk zijn. In andere gevallen moet u bepalen of twee variabelen verwijzen naar hetzelfde onderliggende object in het geheugen. Dit type gelijkheid wordt verwijzings gelijkheid of identiteit genoemd. In dit onderwerp worden deze twee soorten gelijkheid beschreven en vindt u koppelingen naar andere onderwerpen voor meer informatie.
Verwijzing naar gelijkheid
Verwijzingsgewijsheid betekent dat twee objectverwijzingen verwijzen naar hetzelfde onderliggende object. Dit kan gebeuren via een eenvoudige toewijzing, zoals wordt weergegeven in het volgende voorbeeld.
using System;
class Test
{
public int Num { get; set; }
public string Str { get; set; }
public static void Main()
{
Test a = new Test() { Num = 1, Str = "Hi" };
Test b = new Test() { Num = 1, Str = "Hi" };
bool areEqual = System.Object.ReferenceEquals(a, b);
// False:
System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);
// Assign b to a.
b = a;
// Repeat calls with different results.
areEqual = System.Object.ReferenceEquals(a, b);
// True:
System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);
}
}
In deze code worden twee objecten gemaakt, maar na de toewijzingsinstructie verwijzen beide verwijzingen naar hetzelfde object. Daarom hebben ze referentie-gelijkheid. Gebruik de ReferenceEquals methode om te bepalen of twee verwijzingen naar hetzelfde object verwijzen.
Het concept van gelijkheid van verwijzingen is alleen van toepassing op referentietypen. Objecten van het waardetype kunnen niet verwijzen naar gelijkheid omdat wanneer een exemplaar van een waardetype wordt toegewezen aan een variabele, een kopie van de waarde wordt gemaakt. Daarom kunt u nooit twee niet-ingepakte structs hebben die verwijzen naar dezelfde locatie in het geheugen. Als u ReferenceEquals bovendien twee waardetypen vergelijkt, zal het resultaat altijd hetzelfde zijn false
, zelfs als de waarden in de objecten allemaal identiek zijn. Dit komt doordat elke variabele in een afzonderlijk objectexemplaren wordt geplaatst. Zie How to test for reference equality (Identity)voor meer informatie.
Gelijkheid van waarde
Gelijkheid van waarden betekent dat twee objecten dezelfde waarde of waarden bevatten. Voor primitieve waardetypen, zoals int of bool, zijn tests voor gelijkheid van waarden eenvoudig. U kunt de == operator gebruiken, zoals wordt weergegeven in het volgende voorbeeld.
int a = GetOriginalValue();
int b = GetCurrentValue();
// Test for value equality.
if (b == a)
{
// The two integers are equal.
}
Voor de meeste andere typen is het testen op gelijkheid van waarden complexer omdat u moet begrijpen hoe het type dit definieert. Voor klassen en structs met meerdere velden of eigenschappen wordt waarde gelijkheid vaak gedefinieerd om te betekenen dat alle velden of eigenschappen dezelfde waarde hebben. Er kunnen bijvoorbeeld twee Point
objecten worden gedefinieerd als equivalent als puntA.X gelijk is aan puntB.X en puntA.Y gelijk is aan puntB.Y. Voor records betekent gelijkheid van waarden dat twee variabelen van een recordtype gelijk zijn als de typen overeenkomen en alle eigenschaps- en veldwaarden overeenkomen.
Er is echter geen vereiste dat gelijkwaardigheid gebaseerd is op alle velden in een type. Deze kan worden gebaseerd op een subset. Wanneer u typen vergelijkt die u niet bezit, moet u weten hoe gelijkwaardigheid voor dat type wordt gedefinieerd. Zie Hoe u gelijkheid van waarden voor een type definieert voor meer informatie over het definiƫren van gelijkheid van waarden in uw eigen klassen en structs.
Gelijkheid van waarden voor zwevende-kommawaarden
Gelijkheidsvergelijkingen van drijvende-kommawaarden (dubbele en zwevende waarden) zijn problematisch vanwege de onnauwkeurigheid van rekenkundige drijvende komma op binaire computers. Zie de opmerkingen in het onderwerp System.Doublevoor meer informatie.
Verwante onderwerpen
Title | Beschrijving |
---|---|
Testen op referentie gelijkheid (identiteit) | Beschrijft hoe u kunt bepalen of twee variabelen verwijzen naar gelijkheid. |
Gelijkheid van waarden definiƫren voor een type | Hierin wordt beschreven hoe u een aangepaste definitie van waarde gelijkheid voor een type opgeeft. |
Typen | Bevat informatie over het C#-typesysteem en koppelingen naar aanvullende informatie. |
Records | Bevat informatie over recordtypen, die standaard testen op gelijkheid van waarden. |