Compartir vía


Clave (Visual Basic)

La Key palabra clave permite especificar el comportamiento de las propiedades de tipos anónimos. Solo las propiedades que designa como propiedades clave participan en pruebas de igualdad entre instancias de tipo anónimo o cálculo de valores de código hash. No se pueden cambiar los valores de las propiedades clave.

Para designar una propiedad de un tipo anónimo como una propiedad de clave, coloque la palabra clave Key delante de su declaración en la lista de inicialización. 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, hereda directamente de Object. El compilador invalida tres miembros heredados: Equals, GetHashCodey 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 GetHashCode y Equals no se invalidan.

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 que flight1 en el ejemplo anterior porque son instancias del mismo tipo anónimo y tienen valores coincidentes para sus propiedades clave. Sin embargo, flight3 no es igual a flight1 porque tiene un valor diferente para una propiedad de clave, FlightNo. La instancia flight4 no es el mismo tipo que flight1 porque designan propiedades diferentes 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 solo con propiedades no clave, idénticas en nombre, tipo, orden y valor, las dos instancias no son iguales. Una instancia sin propiedades de clave es igual a sí misma.

Para obtener más información sobre las condiciones en las que dos instancias de tipo anónimo son instancias del mismo tipo anónimo, vea Tipos anónimos.

Cálculo de código hash

Al igual Equalsque , la función hash definida en para un tipo anónimo se basa en GetHashCode 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 de clave tienen el mismo valor de código hash, incluso si las propiedades que no son de clave no tienen valores coincidentes. La siguiente instrucción devuelve True.

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

Las instancias de un tipo anónimo que tienen valores diferentes para una o varias propiedades de clave tienen valores de código hash diferentes. La siguiente instrucción 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 incluso cuando los nombres y valores de todas las propiedades son los mismos. La siguiente instrucción devuelve False.

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

Valores de solo lectura

No se pueden cambiar los valores de las propiedades clave. Por ejemplo, en flight1 los ejemplos anteriores, los Airline campos y FlightNo son de solo lectura, pero Gate se pueden 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"

Consulte también