다음을 통해 공유


키(Visual Basic)

Key 키워드를 사용하면 익명 형식의 속성에 대한 동작을 지정할 수 있습니다. 키 속성으로 지정한 속성만 익명 형식 인스턴스 간의 같음 테스트 또는 해시 코드 값 계산에 참여합니다. 키 속성의 값은 변경할 수 없습니다.

초기화 목록의 선언 앞에 키워드 Key 를 배치하여 익명 형식의 속성을 키 속성으로 지정합니다. 다음 예제 AirlineFlightNo 에서는 키 속성이지만 Gate 그렇지 않습니다.

Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines",
                        Key .FlightNo = 3554, .Gate = "C33"}

새 익명 형식이 만들어지면 .에서 Object직접 상속됩니다. 컴파일러는 상속된 세 멤버 Equals인 , GetHashCodeToString.를 재정의합니다. 생성되고 EqualsGetHashCode 키 속성을 기반으로 하는 재정의 코드입니다. 형식 GetHashCodeEquals 에 키 속성이 없고 재정의되지 않은 경우

평등

두 개의 익명 형식 인스턴스는 동일한 형식의 인스턴스이고 해당 키 속성의 값이 같은 경우 동일합니다. 다음 예제 flight2 에서는 동일한 익명 형식의 인스턴스이고 해당 키 속성에 대해 일치하는 값을 가지므로 이전 예제와 같습니다 flight1 . 그러나 flight3 키 속성FlightNoflight1 대한 값이 다르기 때문에 같지 않습니다. 인스턴스 flight4 는 다른 속성을 키 속성으로 flight1 지정하기 때문에 형식이 동일하지 않습니다.

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))

이름, 형식, 순서 및 값이 동일한 키가 아닌 속성만 사용하여 두 인스턴스를 선언하는 경우 두 인스턴스는 같지 않습니다. 키 속성이 없는 인스턴스는 자체와만 같습니다.

두 익명 형식 인스턴스가 동일한 익명 형식의 인스턴스인 조건에 대한 자세한 내용은 익명 형식을 참조 하세요.

해시 코드 계산

마찬가지로 Equals익명 형식에 대해 정의된 GetHashCode 해시 함수는 형식의 키 속성을 기반으로 합니다. 다음 예제에서는 키 속성과 해시 코드 값 간의 상호 작용을 보여 줍니다.

키가 아닌 속성에 일치하는 값이 없더라도 모든 키 속성에 대해 동일한 값을 가진 익명 형식의 인스턴스는 동일한 해시 코드 값을 갖습니다. 다음 문은 .를 반환합니다 True.

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

하나 이상의 키 속성에 대한 값이 다른 익명 형식의 인스턴스에는 다른 해시 코드 값이 있습니다. 다음 문은 .를 반환합니다 False.

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

다른 속성을 키 속성으로 지정하는 익명 형식의 인스턴스는 동일한 형식의 인스턴스가 아닙니다. 모든 속성의 이름과 값이 동일한 경우에도 해시 코드 값이 다릅니다. 다음 문은 .를 반환합니다 False.

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

Read-Only 값

키 속성의 값은 변경할 수 없습니다. 예를 들어 앞의 예제 Airline 에서 flight1 필드와 FlightNo 필드는 읽기 전용이지만 Gate 변경할 수 있습니다.

' 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"

참고하십시오