Klucz (Visual Basic)
Key Słowa kluczowego można określić zachowanie dla właściwości typy anonimowe.Tylko właściwości można wyznaczyć jako właściwości klucza uczestniczyć w badaniach równości wystąpień typ anonimowy lub obliczenie wartości mieszania w kodzie.Nie można zmienić wartości właściwości klucza.
Wyznaczyć właściwość Typ anonimowy jako właściwość klucza, zaznaczając słowo kluczowe Key z przodu swoją deklarację na liście inicjalizacji.W poniższym przykładzie Airline i FlightNo są właściwości klucza, ale Gate nie jest.
Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 3554, .Gate = "C33"}
Gdy tworzony jest nowy typ anonimowy, dziedziczy ona bezpośrednio z Object.Kompilator zastępuje trzech członków dziedziczonych: Equals, GetHashCode, i ToString.Kod override, który jest wytwarzany dla Equals i GetHashCode opiera się na kluczowych właściwości.Jeśli w polu Typ, nie istnieją właściwości klucza GetHashCode i Equals nie są zastępowane.
Równości
Dwa wystąpienia typu anonimowe są równe, jeśli są one wystąpień tego samego rodzaju i wartości ich właściwości klucza są równe.W poniższych przykładach flight2 jest równa flight1 z poprzedniego przykładu, ponieważ są one wystąpień tego samego anonimowe typu i ma pasujących wartości dla ich właściwości klucza.Jednakże flight3 nie jest równa flight1 , ponieważ ma ona inną wartość dla właściwości klucza, FlightNo.Wystąpienie flight4 nie jest tego samego typu co flight1 , ponieważ one wyznaczyć różne właściwości jako właściwości klucza.
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))
Jeśli dwa wystąpienia są zgłoszone jako tylko-do klucza właściwości, identyczna nazwa, typ, zamówienia i wartości, dwa wystąpienia nie są równe.Wystąpienie bez właściwości klucza jest równy sobie samemu.
Aby uzyskać więcej informacji na temat warunków, w jakich dwóch wystąpień typ anonimowy są instancjami tego samego rodzaju anonimowe zobacz Typy anonimowe (Visual Basic).
Obliczenia kod mieszania
Podobnie jak Equals, funkcji mieszania, która jest zdefiniowana w GetHashCode na typ anonimowy opiera się na kluczowych właściwości typu.Następujące przykłady przedstawiają interakcji między właściwościami klucza i mieszania wartości kodu.
Wystąpienia typ anonimowy, które mają tej samej wartości dla wszystkich kluczowych właściwości mają tę samą wartość kodu mieszania, nawet jeśli właściwości klucza nie ma pasujących wartości.Następująca instrukcja zwraca True.
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
Wystąpienia typ anonimowy, które mają różne wartości dla jednego lub więcej kluczowych właściwości mają wartości Kod mieszania różnych.Następująca instrukcja zwraca False.
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Wystąpienia typów anonimowych, które wyznaczyć różne właściwości jako właściwości klucza nie są wystąpień tego samego typu.Mają one wartości Kod mieszania różnych, nawet w przypadku, gdy nazwy i wartości wszystkich właściwości są takie same.Następująca instrukcja zwraca False.
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
Wartości tylko do odczytu
Nie można zmienić wartości właściwości klucza.Na przykład w flight1 w wcześniejszych przykładów Airline i FlightNo pola są tylko do odczytu, ale Gate mogą być zmieniane.
' 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"
Zobacz też
Zadania
Jak: wywnioskować nazwy właściwości i typów w deklaracji typu anonimowego (Visual Basic)