Key (Visual Basic)

La Key palabra clave permite especificar el comportamiento de las propiedades de tipos anónimos. Solo las propiedades que designe 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 de clave.

Para designar una propiedad de un tipo anónimo como una propiedad de clave, coloque la palabra clave delante de Key su declaración en la lista de inicialización. En el ejemplo siguiente, Airline y FlightNo son propiedades clave, pero no es Gate .

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 GetHashCode , y ToString . El código de invalidación que se genera para Equals y se basa en las propiedades de GetHashCode clave. Si no hay ninguna propiedad clave en el tipo y GetHashCode Equals no se invalida.

Igualdad

Dos instancias de tipo anónimo son iguales si son instancias del mismo tipo y si los valores de sus propiedades de clave son iguales. En los ejemplos siguientes, es igual a del ejemplo anterior porque son instancias del mismo tipo anónimo y tienen valores de coincidencia para flight2 flight1 sus propiedades de clave. Sin embargo, flight3 no es igual a porque tiene un valor diferente para una propiedad de flight1 clave, FlightNo . La flight4 instancia no es del mismo tipo que porque flight1 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 se declaran dos instancias con solo propiedades que no son de clave, idénticas en nombre, tipo, orden y valor, las dos instancias no son iguales. Una instancia sin propiedades de clave solo 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 que , la función hash que se define en para un tipo Equals anónimo se basa en las propiedades clave del GetHashCode tipo. En los ejemplos siguientes se muestra la interacción entre las propiedades de 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 que coincidan. 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)

Read-Only valores

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

Consulta también