Key (Visual Basic)
The Key palavra-chave permite que você especifique o comportamento de propriedades de tipos anônimo. Somente propriedades que você designar sistema autônomo propriedades de chave participam de testes de igualdade entre instâncias de tipo anônimo ou o cálculo dos valores de código 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 substitui três membros herdados: Equals, GetHashCode, e ToString. O código de substituir é produzido para Equals e GetHashCode baseia-se em chave Propriedades. 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.Os exemplos a seguir, flight2 é igual a flight1 do exemplo anterior porque elas são instâncias de anônimo mesmo tipo e eles têm correspondência valores para suas chave propriedades. No entanto, flight3 não é igual a flight1 porque ela tem um valor diferente para uma propriedade de chave FlightNo. Instância flight4 não é o mesmo tipo flight1 porque eles designar diferentes propriedades sistema autônomo 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 em que dois tipo anônimo instâncias são instâncias do mesmo tipo anônimo, consulte Tipos anônimos.
Cálculo Dividido de Código
Como Equals, a função de hash é definida em GetHashCode para um tipo anônimo é com base 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 possuem os mesmos valores para todas as propriedades de chaves tiverem o mesmo valor de código hash, mesmo se não-chave propriedades ainda não tiver valores correspondentes.A demonstrativo 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-chave têm valores de código hash diferente.A demonstrativo seguinte retorna False.
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Instâncias de tipos anônimo designar diferentes propriedades sistema autônomo propriedades de chave não são instâncias do mesmo tipo.Eles têm valores de código hash diferente, mesmo quando os nomes e valores de todas as propriedades são iguais.A demonstrativo 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 tipos na declaração de tipo anônimo e nomes de propriedade
Como: Declare uma instância de um tipo anônimo
Conceitos
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Exemplos de adicionado para a seção "Cálculo do código hash". |
Aprimoramento de informações. |