Share via


Key(Visual Basic)

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

Key 키워드를 초기화 목록의 익명 형식 선언 앞에 배치하여 해당 익명 형식의 속성을 키 속성으로 지정합니다. 다음 예제에서 Airline 및 FlightNo는 키 속성이지만 Gate는 키 속성이 아닙니다.

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

새 익명 형식이 만들어질 때 Object에서 직접 상속됩니다. 컴파일러는 세 개의 상속된 멤버인 Equals, GetHashCode, 및 ToString을 재정의합니다. EqualsGetHashCode에 대해 생성되는 재정의 코드는 키 속성을 기반으로 합니다. 형식에 키 속성이 없는 경우 GetHashCodeEquals가 재정의되지 않습니다.

같음

두 개의 익명 형식 인스턴스는 같은 형식의 인스턴스이고 해당 키 속성의 값이 같은 경우 같습니다. 다음 예제에서 flight2는 이전 예제의 flight1과 같은데 그 이유는 이 두 인스턴스가 동일한 익명 형식의 인스턴스이고 키 속성의 값이 일치하기 때문입니다. 하지만 flight3은 flight1과 같지 않은데 그 이유는 키 속성인 FlightNo의 값이 다르기 때문입니다. 인스턴스 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))

두 인스턴스의 이름, 형식, 순서 및 값이 같더라도 키가 아닌 속성으로만 선언된 경우 이 두 인스턴스는 같지 않습니다. 키 속성이 없는 인스턴스는 자신하고만 같습니다.

두 익명 형식 인스턴스가 동일한 익명 형식의 인스턴스가 되는 조건에 대한 자세한 내용은 익명 형식(Visual Basic)을 참조하십시오.

해시 코드 계산

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

모든 키 속성 값이 같은 익명 형식 인스턴스는 키 속성이 아닌 속성의 값이 일치하지 않는 경우에도 동일한 해시 코드 값을 가집니다. 다음 문에서는 True를 반환합니다.

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

하나 이상의 키 속성 값이 다른 익명 형식 인스턴스는 서로 다른 해시 코드 값을 가집니다. 다음 문에서는 False를 반환합니다.

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

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

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

읽기 전용 값

키 속성의 값은 변경할 수 없습니다. 예를 들어 앞 예제의 flight1에서 Airline 및 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"

참고 항목

작업

방법: 익명 형식 선언에서 속성 이름 및 형식 유추(Visual Basic)

방법: 익명 형식의 인스턴스 선언(Visual Basic)

개념

익명 형식 정의(Visual Basic)

익명 형식(Visual Basic)