Share via


Key (Visual Basic)

O Key palavra-chave permite que você especifique o comportamento para propriedades de tipos anônimos. Somente as propriedades que você designar como propriedades de chave participarem em testes de igualdade entre instâncias do tipo anônimo ou o cálculo dos valores do código hash . The values of key properties cannot be changed.

You designate a property of an anonymous type as a key property by placing the keyword Key in front of its declaration in the initialization list. In the following example, Airline and FlightNo are key properties, but Gate is not.

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

When a new anonymous type is created, it inherits directly from Object. O compilador substitui três membros herdados: Equals, GetHashCode, and ToString. O código de substituir é produzido para Equals e GetHashCode se baseia em Propriedades de chave . If there are no key properties in the type, GetHashCode and Equals are not overridden.

Equality

Two anonymous type instances are equal if they are instances of the same type and if the values of their key properties are equal. Nos exemplos a seguir, flight2 é igual a flight1 do exemplo anterior porque são instâncias do mesmo tipo anônimo e eles têm correspondência valores para suas propriedades de chave . No entanto, flight3 não é igual a flight1 porque ele tem um valor diferente para uma chave propriedade, FlightNo. Instância flight4 é não o mesmo tipo flight1 porque eles designar propriedades diferentes como propriedades de chave .

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

If two instances are declared with only non-key properties, identical in name, type, order, and value, the two instances are not equal. An instance without key properties is equal only to itself.

Para obter mais informações sobre as condições em que tipo anônimo de duas instâncias são instâncias do mesmo tipo anônimo, consulte Tipos anônimos (Visual Basic).

Hash Code Calculation

Como Equals, a função de hash que é definido em GetHashCode para um tipo anônimo é baseado nas propriedades de chave do tipo. Os exemplos a seguir mostram a interação entre as propriedades de chave e valores de código hash .

Instâncias de um tipo anônimo que possuem os mesmos valores para todas as propriedades de chave tem o mesmo valor do código hash , mesmo se não-propriedades dechave não têm valores correspondentes. A demonstrativo a seguir retorna True.

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

Instâncias de um tipo anônimo que possuem valores diferentes para uma ou mais propriedades de chave tem valores diferentes de código hash . A demonstrativo a seguir retorna False.

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

Instâncias de tipos anônimos, designar a propriedades diferentes como propriedades de chave não são instâncias do mesmo tipo. Eles têm valores diferentes de código hash , mesmo quando os nomes e valores de todas as propriedades são os mesmos. A demonstrativo a seguir retorna False.

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

Read-Only Values

The values of key properties cannot be changed. Por exemplo, em flight1 nos exemplos anteriores, o Airline e FlightNo campos que são somente leitura, mas Gate pode ser alterado.

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

Consulte também

Tarefas

Como: inferir nomes e tipos de propriedade em declarações de tipo anônimo (Visual Basic)

Como: Declarar uma instância de um tipo anônimo (Visual Basic)

Conceitos

Definição de tipo anônimo (Visual Basic)

Tipos anônimos (Visual Basic)