Share via


Sleutel (Visual Basic)

Met Key het trefwoord kunt u gedrag opgeven voor eigenschappen van anonieme typen. Alleen eigenschappen die u als sleuteleigenschappen aanwijst, nemen deel aan tests van gelijkheid tussen anonieme type instanties of het berekenen van hashcodewaarden. De waarden van sleuteleigenschappen kunnen niet worden gewijzigd.

U wijst een eigenschap van een anoniem type aan als een sleuteleigenschap door het trefwoord Key vóór de declaratie in de initialisatielijst te plaatsen. In het volgende voorbeeld Airline zijn dit FlightNo belangrijke eigenschappen, maar Gate niet.

Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
                        Key .FlightNo = 3554, .Gate = "C33"}

Wanneer een nieuw anoniem type wordt gemaakt, wordt dit rechtstreeks overgenomen van Object. De compiler overschrijft drie overgenomen leden: Equals, GetHashCodeen ToString. De onderdrukkingscode die wordt geproduceerd voor Equals en GetHashCode is gebaseerd op sleuteleigenschappen. Als er geen sleuteleigenschappen in het type GetHashCode zijn en Equals niet worden overschreven.

Equality

Twee anonieme exemplaren zijn gelijk als ze exemplaren van hetzelfde type zijn en als de waarden van de sleuteleigenschappen gelijk zijn. In de volgende voorbeelden is dit flight2 gelijk aan flight1 uit het vorige voorbeeld, omdat ze exemplaren van hetzelfde anonieme type zijn en ze overeenkomende waarden hebben voor hun sleuteleigenschappen. flight3 Is echter niet gelijk aan flight1 omdat deze een andere waarde heeft voor een sleuteleigenschap, FlightNo. Het exemplaar flight4 is niet hetzelfde type omdat flight1 ze verschillende eigenschappen als sleuteleigenschappen aanwijzen.

Dim flight2 = New With {Key .Airline = "Blue Yonder Airlines",
                        Key .FlightNo = 3554, .Gate = "D14"}
' The following statement displays True. The values of the non-key 
' property, Gate, do not have to be equal.
Console.WriteLine(flight1.Equals(flight2))

Dim flight3 = New With {Key .Airline = "Blue Yonder Airlines",
                        Key .FlightNo = 431, .Gate = "C33"}
' The following statement displays False, because flight3 has a
' different value for key property FlightNo.
Console.WriteLine(flight1.Equals(flight3))

Dim flight4 = New With {Key .Airline = "Blue Yonder Airlines",
                        .FlightNo = 3554, .Gate = "C33"}
' The following statement displays False. Instance flight4 is not the 
' same type as flight1 because they have different key properties. 
' FlightNo is a key property of flight1 but not of flight4.
Console.WriteLine(flight1.Equals(flight4))

Als twee exemplaren worden gedeclareerd met alleen niet-sleuteleigenschappen, identiek in naam, type, volgorde en waarde, zijn de twee exemplaren niet gelijk. Een exemplaar zonder sleuteleigenschappen is alleen gelijk aan zichzelf.

Zie Anonieme typen voor meer informatie over de voorwaarden waaronder twee anonieme exemplaren exemplaren van hetzelfde anonieme type zijn.

Hashcodeberekening

De hash-functie die is gedefinieerd GetHashCode voor een anoniem type, is bijvoorbeeld Equalsgebaseerd op de sleuteleigenschappen van het type. In de volgende voorbeelden ziet u de interactie tussen sleuteleigenschappen en hashcodewaarden.

Exemplaren van een anoniem type met dezelfde waarden voor alle sleuteleigenschappen hebben dezelfde hashcodewaarde, zelfs als niet-sleuteleigenschappen geen overeenkomende waarden hebben. De volgende instructie retourneert True.

Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)

Exemplaren van een anoniem type met verschillende waarden voor een of meer sleuteleigenschappen hebben verschillende hashcodewaarden. De volgende instructie retourneert False.

Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)

Exemplaren van anonieme typen die verschillende eigenschappen aanwijzen als sleuteleigenschappen, zijn geen exemplaren van hetzelfde type. Ze hebben verschillende hash-codewaarden, zelfs wanneer de namen en waarden van alle eigenschappen hetzelfde zijn. De volgende instructie retourneert False.

Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)

Alleen-lezen waarden

De waarden van sleuteleigenschappen kunnen niet worden gewijzigd. In de eerdere voorbeelden zijn de Airline velden FlightNo bijvoorbeeld flight1 alleen-lezen, maar Gate kunnen ze worden gewijzigd.

' The following statement will not compile, because FlightNo is a key
' property and cannot be changed.
' flight1.FlightNo = 1234
'
' Gate is not a key property. Its value can be changed.
flight1.Gate = "C5"

Zie ook