Key (Visual Basic)

Le mot clé Key vous permet de spécifier le comportement des propriétés de types anonymes. Seules les propriétés que vous désignez comme les propriétés de clé participent aux tests d'égalité entre des instances de type anonymes ou au calcul de valeurs de code de hachage. Les valeurs des propriétés de clé ne peuvent pas être modifiées.

Vous désignez une propriété d'un type anonyme comme propriété de clé en plaçant le mot clé Key devant sa déclaration dans la liste d'initialisation. Dans l'exemple suivant, Airline et FlightNo sont des propriétés de clé, à l'inverse de Gate.

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

Lorsqu'un nouveau type anonyme est créé, il hérite directement de Object. Le compilateur substitue trois membres hérités : Equals, GetHashCode et ToString. Le code de substitution produit pour Equals et GetHashCode est basé sur les propriétés de clé. Si le type ne présente pas de propriétés de clé, GetHashCode et Equals ne sont pas substitués.

Égalité

Deux instances de type anonymes sont égales si elles sont des instances du même type et si les valeurs de leurs propriétés de clé sont égales. Dans les exemples suivants, flight2 est égale à flight1 de l'exemple précédent parce que ce sont des instances du même type anonyme et qu'elles ont des valeurs correspondantes pour leurs propriétés de clé. Toutefois, flight3 n'est pas égale à flight1 parce qu'elle a une valeur différente pour une propriété de clé, FlightNo. L'instance flight4 n'est pas du même type que flight1 parce qu'elles désignent des propriétés différentes comme propriétés de clé.

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))

Si deux instances sont déclarées uniquement avec des propriétés ne correspondant pas à une clé, avec un nom, un type, un ordre et une valeur identiques, les deux instances ne sont pas égales. Une instance sans propriété de clé est uniquement égale à elle-même.

Pour plus d'informations sur les conditions dans lesquelles deux instances de type anonyme sont des instances du même type anonyme, consultez Types anonymes (Visual Basic).

Calcul de code de hachage

Comme Equals, la fonction de hachage définie dans GetHashCode car un type anonyme est basé sur les propriétés de clé du type. Les exemples suivants montrent l'interaction entre les propriétés de clé et les valeurs de code de hachage.

Les instances d'un type anonyme qui ont les mêmes valeurs pour toutes les propriétés de clé ont la même valeur de code de hachage, même si les propriétés ne correspondant pas à une clé n'ont pas de valeurs correspondantes. L'instruction suivante retourne True.

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

Les instances d'un type anonyme qui ont des valeurs différentes pour une ou plusieurs propriétés de clé ont des valeurs de code de hachage différentes. L'instruction suivante retourne False.

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

Les instances de types anonymes qui désignent des propriétés différentes comme propriétés de clé ne sont pas des instances du même type. Elles ont des valeurs de code de hachage différentes même lorsque les noms et valeurs de toutes les propriétés sont les mêmes. L'instruction suivante retourne False.

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

Valeurs en lecture seule

Les valeurs des propriétés de clé ne peuvent pas être modifiées. Par exemple, les champs Airline et FlightNo sont en lecture seule dans flight1 dans les exemples précédents, mais Gate peut être modifié.

' 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"

Voir aussi

Tâches

Comment : déduire les types et les noms de propriétés dans des déclarations de types anonymes (Visual Basic)

Comment : déclarer une instance d'un type anonyme (Visual Basic)

Concepts

Définition du type anonyme (Visual Basic)

Types anonymes (Visual Basic)