Condividi tramite


Key (Visual Basic)

La parola chiave Key consente di specificare il comportamento per le proprietà di tipi anonimi. Solo le proprietà che si definiscono come proprietà chiave vengono utilizzate nei test di uguaglianza tra le istanze di tipo anonimo o nel calcolo dei valori del codice hash. I valori delle proprietà chiave non possono essere modificati.

Si definisce una proprietà di un tipo anonimo come proprietà chiave inserendo la parola chiave Key davanti alla dichiarazione nell'elenco di inizializzazione. Nell'esempio riportato di seguito Airline e FlightNo sono proprietà chiave, ma Gate non lo è.

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

Quando viene creato un nuovo tipo anonimo nuovo, eredita direttamente da Object. Il compilatore esegue l'override di tre membri ereditati: Equals, GetHashCodee ToString. Il codice di override prodotto per gli oggetti Equals e GetHashCode è basato sulle proprietà chiave. Se non esistono proprietà chiave nel tipo, non viene eseguito l'override di GetHashCode e Equals.

Uguaglianza

Due istanze di tipi anonimi sono uguali solo se sono istanze dello stesso tipo e se i valori delle relative proprietà chiave sono uguali. Negli esempi riportati di seguito, l'oggetto flight2 è uguale all'oggetto flight1 dell'esempio precedente poiché sono istanze dello stesso tipo anonimo e dispongono di valori corrispondenti per le proprietà chiave. Tuttavia, l'oggetto flight3 non è uguale all'oggetto flight1 poiché dispone di un valore diverso per una proprietà chiave, ovvero FlightNo. Il tipo dell'istanza dell'oggetto flight4 non è uguale all'oggetto flight1 poiché definiscono proprietà diverse come proprietà chiave.

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

Se due istanze vengono dichiarate con solo proprietà non chiave identiche per nome, tipo, ordine e valore, le due istanze non sono uguali. Un'istanza senza proprietà chiave è uguale solo a se stessa.

Per ulteriori informazioni sulle condizioni in cui due istanze di tipo anonimo sono istanze dello stesso tipo anonimo, vedere Tipi anonimi (Visual Basic).

Calcolo del codice hash

Come per l'oggetto Equals, la funzione hash definita nell'oggetto GetHashCode per un tipo anonimo è basata sulle proprietà chiave del tipo. Negli esempi seguenti viene mostrata l'interazione tra le proprietà chiave e i valori del codice hash.

Le istanze di un tipo anonimo che dispongono degli stessi valori per tutte le proprietà chiave hanno lo stesso valore di codice hash, anche se le proprietà non chiave non dispongono di valori corrispondenti. L'istruzione seguente restituisce True.

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

Le istanze di un tipo anonimo che dispongono di valori diversi per una o più proprietà chiave hanno valori di codice hash differenti. L'istruzione seguente restituisce False.

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

Le istanze di tipo anonimo che definiscono diverse proprietà come proprietà chiave non sono istanze dello stesso tipo. Dispongono di valori di codice hash diversi anche quando i nomi e i valori di tutte le proprietà sono gli stessi. L'istruzione seguente restituisce False.

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

Valori di sola lettura.

I valori delle proprietà chiave non possono essere modificati. Ad esempio, nell'oggetto flight1 degli esempi descritti in precedenza, i campi Airline e FlightNo sono di sola lettura, ma l'oggetto Gate può essere modificato.

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

Vedere anche

Attività

Procedura: dedurre tipi e nomi di proprietà nelle dichiarazioni di tipo anonimo (Visual Basic)

Procedura: dichiarare un'istanza di un tipo anonimo (Visual Basic)

Concetti

Definizione di tipo anonimo (Visual Basic)

Tipi anonimi (Visual Basic)