Partager via


Clé (Visual Basic)

Le Key mot clé vous permet de spécifier le comportement des propriétés des types anonymes. Seules les propriétés que vous désignez comme propriétés clés participent aux tests d’égalité entre les instances de type anonyme ou le calcul des 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 en tant que 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 clés, mais Gate ce n’est pas le cas.

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 remplace trois membres hérités : Equals, GetHashCodeet ToString. Code de remplacement généré et EqualsGetHashCode basé sur les propriétés de clé. S’il n’y a pas de propriétés de clé dans le type et GetHashCodeEquals qu’elles ne sont pas remplacées.

Égalité

Deux instances de type anonyme 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 égal à celui flight1 de l’exemple précédent, car il s’agit d’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 égal à flight1 car il 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’elle désigne des propriétés différentes en tant que 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 non clés, identiques dans le nom, le type, l’ordre et la valeur, les deux instances ne sont pas égales. Une instance sans propriétés de clé est égale uniquement à 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.

Calcul du code de hachage

Comme Equals, la fonction de hachage définie pour GetHashCode un type anonyme est basée 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 non clés 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 en tant que propriétés de clé ne sont pas des instances du même type. Ils ont des valeurs de code de hachage différentes même si les noms et les valeurs de toutes les propriétés sont identiques. 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, dans flight1 les exemples précédents, les champs et FlightNo les Airline champs sont en lecture seule, mais Gate peuvent être modifiés.

' 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