Key (Visual Basic)

Aktualisiert: Juli 2008

Mit dem Key-Schlüsselwort kann das Verhalten von Eigenschaften anonymer Typen festgelegt werden. In Gleichheitstests zwischen Instanzen anonymen Typs und bei der Berechnung von Hashcodewerten werden nur als Haupteigenschaften deklarierte Eigenschaften einbezogen. Die Werte von Haupteigenschaften können nicht geändert werden.

Eine Eigenschaft eines anonymen Typs wird als Haupteigenschaft gekennzeichnet, indem der Deklaration in der Initialisierungsliste das Schlüsselwort Key vorangestellt wird. Im folgenden Beispiel sind Airline und FlightNo Haupteigenschaften, Gate jedoch nicht.

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

Wenn ein neuer anonymer Typ erstellt wird, erbt er direkt von Object. Der Compiler überschreibt drei geerbte Member: Equals, GetHashCode und ToString. Der Überschreibungscode, der für Equals erzeugt wird, und GetHashCode basieren auf Haupteigenschaften. Wenn der betreffende Typ keine Haupteigenschaften hat, werden GetHashCode und Equals nicht überschrieben.

Gleichheit

Zwei Instanzen eines anonymen Typs sind gleich, wenn sie Instanzen desselben Typs sind und die Werte ihrer Haupteigenschaften übereinstimmen. In folgenden Beispielen stimmt flight2 mit flight1 aus dem vorigen Beispiel überein, da sie Instanzen vom gleichen anonymen Typ sind und die gleichen Werte für ihre Haupteigenschaften haben. flight3 entspricht allerdings nicht flight1, da der Wert einer Haupteigenschaft abweicht: FlightNo. Die Instanz flight4 ist nicht der gleiche Typ wie flight1, da sie andere Eigenschaften als Haupteigenschaften festlegen.

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

Wenn zwei Instanzen ohne Haupteigenschaften deklariert werden, sind sie auch dann nicht gleich, wenn Name, Typ, Reihenfolge und Wert übereinstimmen. Eine Instanz ohne Haupteigenschaften gleicht nur sich selbst.

Weitere Informationen zu den Bedingungen, unter denen zwei Instanzen anonymen Typs Instanzen des gleichen anonymen Typs sind, finden Sie unter Anonyme Typen.

Hashcodeberechnung

Wie Equals basiert auch die unter GetHashCode definierte Hashfunktion für einen anonymen Typ auf den Haupteigenschaften des Typs. In den folgenden Beispielen wird die Interaktion zwischen Haupteigenschaften und Hashcodewerten veranschaulicht.

Instanzen eines anonymen Typs mit dem gleichen Wert für alle Haupteigenschaften verfügen auch dann über den gleichen Hashcodewert, wenn die Werte der Nicht-Haupteigenschaften nicht übereinstimmen. Die folgende Anweisung gibt True zurück.

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

Instanzen eines anonymen Typs mit unterschiedlichen Werten für mindestens eine Haupteigenschaft verfügen über unterschiedliche Hashcodewerte. Die folgende Anweisung gibt False zurück.

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

Instanzen anonymen Typs, die unterschiedliche Eigenschaften als Haupteigenschaften festlegen, sind keine Instanzen des gleichen Typs. Sie verfügen auch dann über verschiedene Hashcodewerte, wenn die Namen und Werte aller Eigenschaften gleich sind. Die folgende Anweisung gibt False zurück.

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

Schreibgeschützte Werte

Die Werte von Haupteigenschaften können nicht geändert werden. In flight1 aus obigen Beispielen sind die Felder Airline und FlightNo beispielsweise schreibgeschützt, das Feld Gate kann jedoch geändert werden.

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

Siehe auch

Aufgaben

Gewusst wie: Ableiten von Eigenschaftennamen und Typen in Deklarationen von anonymen Typen

Gewusst wie: Deklarieren einer Instanz eines anonymen Typs

Konzepte

Definition von anonymen Typen

Anonyme Typen

Änderungsprotokoll

Date

Versionsgeschichte

Grund

Juli 2008

Beispiele zum Abschnitt "Hashcodeberechnung" hinzugefügt.

Informationsergänzung.