Chave (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 de testes de igualdade entre instâncias do tipo anônimo ou o cálculo dos valores do código de hash. No entanto, os valores das propriedades de chave não podem ser alterados.
Você designa uma propriedade de um tipo anônimo como uma propriedade-chave colocando a palavra-chave Key na frente de sua declaração na lista de inicialização. No exemplo a seguir, Airline e FlightNo são propriedades-chave, mas Gate não é.
Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 3554, .Gate = "C33"}
Quando um novo tipo anônimo é criado, ele herda diretamente de Object. O compilador desautoriza três membros herdados: Equals, GetHashCode e ToString. O código de substituição é produzido para Equals e GetHashCode se baseia nas propriedades de chaves. Se não há propriedades-chave no tipo, GetHashCode e Equals não são desautorizados.
Igualdade
Duas instâncias de tipo anônimo são iguais se são instâncias do mesmo tipo e se os valores de suas propriedades-chave são iguais. Nos exemplos a seguir, flight2 é igual a flight1 do exemplo anterior porque elas são instâncias do mesmo anônimo tipo e eles com valores correspondentes para suas propriedades de chaves. No entanto, flight3 não é igual a flight1 porque ele tem um valor diferente para uma propriedade de chave, FlightNo. Instância flight4 não é do mesmo tipo que 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))
Se duas instâncias de tipo são declaradas com apenas propriedades que não são chave, idênticas em nome, tipo, ordem e valor, as duas instâncias não são iguais. Uma instância sem propriedades-chave é igual somente a ela mesma.
Para obter mais informações sobre as condições sob as quais duas instâncias do tipo anônimo são instâncias do mesmo tipo anônimo, consulte Tipos anônimos (Visual Basic).
Cálculo Dividido de Código
Como Equals, a função de hash é definida em GetHashCode para um tipo anônimo é baseado nas propriedades principais do tipo. Os exemplos a seguir mostram a interação entre propriedades de chave e hash de valores de código.
Instâncias de um tipo anônimo que têm os mesmos valores para todas as propriedades principais têm o mesmo valor de código hash, mesmo se as propriedades não-chave não têm valores correspondentes. A instrução seguinte retorna True.
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
Instâncias de um tipo anônimo que possuem valores diferentes para um ou mais propriedades de chave têm valores de código de hash diferente. A instrução seguinte retorna False.
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Instâncias de tipos anônimos que designar propriedades diferentes como propriedades de chave não são instâncias do mesmo tipo. Mesmo quando os nomes e valores de todas as propriedades são os mesmos, eles têm valores de código hash diferente. A instrução seguinte retorna False.
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
Valores somente leitura
No entanto, os valores das propriedades de chave não podem ser alterados. Por exemplo, em flight1 nos exemplos anteriores, o Airline e FlightNo campos 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)