Key (Visual Basic)
La palabra clave Key permite especificar el comportamiento de las propiedades de tipos anónimos. Solo las propiedades que designa como propiedades clave participan en las pruebas de igualdad entre las instancias de tipo anónimo o el cálculo de valores de código hash. Los valores de las propiedades de clave no se pueden cambiar.
Para designar una propiedad de un tipo anónimo como propiedad clave, coloque la palabra clave Key delante de su declaración en la lista de inicializaciones. En el ejemplo siguiente, Airline y FlightNo son propiedades clave, pero Gate no lo es.
Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
Key .FlightNo = 3554, .Gate = "C33"}
Cuando se crea un nuevo tipo anónimo, éste hereda directamente de Object. El compilador invalida tres miembros heredados: Equals, GetHashCode y ToString. El código de invalidación que se genera para Equals y GetHashCode se basa en las propiedades clave. Si no hay ninguna propiedad clave en el tipo, no se invalidan GetHashCode y Equals.
Igualdad
Dos instancias de tipo anónimo son iguales si son instancias del mismo tipo y si los valores de sus propiedades clave son iguales. En los ejemplos siguientes, flight2 es igual a flight1 del ejemplo anterior porque son instancias del mismo tipo anónimo y tienen valores coincidentes en sus propiedades clave. Sin embargo, flight3 no es igual a flight1 porque tiene un valor diferente para una propiedad clave, FlightNo. La instancia flight4 no es del mismo tipo que flight1 porque ambas designan diferentes propiedades como propiedades clave.
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))
Si dos instancias se declaran únicamente con propiedades que no son clave y con el mismo nombre, tipo, orden y valor, no son iguales. Una instancia sin propiedades clave solamente es igual a sí misma.
Para obtener más información sobre las condiciones bajo las que dos instancias de tipo anónimo son instancias del mismo tipo anónimo, vea Tipos anónimos (Visual Basic).
Cálculo del código hash
Al igual que Equals, la función hash que se define en GetHashCode para un tipo anónimo se basa en las propiedades clave del tipo. En los ejemplos siguientes se muestra la interacción entre las propiedades clave y los valores de código hash.
Las instancias de un tipo anónimo que tienen los mismos valores para todas las propiedades clave tienen el mismo valor de código hash, aunque las propiedades que no son clave no tengan valores coincidentes. La instrucción siguiente devuelve True.
Console.WriteLine(flight1.GetHashCode = flight2.GetHashCode)
Las instancias de un tipo anónimo que tienen valores diferentes para una o más propiedades clave tienen diferentes valores de código hash. La instrucción siguiente devuelve False.
Console.WriteLine(flight1.GetHashCode = flight3.GetHashCode)
Las instancias de tipos anónimos que designan propiedades diferentes como propiedades clave no son instancias del mismo tipo. Tienen valores de código hash diferentes aunque los nombres y valores de todas las propiedades sean los mismos. La instrucción siguiente devuelve False.
Console.WriteLine(flight1.GetHashCode = flight4.GetHashCode)
Valores de sólo lectura
Los valores de las propiedades de clave no se pueden cambiar. Por ejemplo, en flight1 de los ejemplos anteriores, los campos Airline y FlightNo son de solo lectura, pero Gate se puede cambiar.
' 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"
Vea también
Tareas
Cómo: Deducir tipos y nombres de propiedades en declaraciones de tipos anónimos (Visual Basic)