Key(Visual Basic)
업데이트: 2008년 7월
Key 키워드를 사용하면 익명 형식의 속성에 대한 동작을 지정할 수 있습니다. 키 속성으로 지정하는 속성만 익명 형식 인스턴스 간 같음 테스트나 해시 코드 값 계산에 참여합니다. 키 속성의 값은 변경할 수 없습니다.
Key 키워드를 초기화 목록의 익명 형식 선언 앞에 배치하여 해당 익명 형식의 속성을 키 속성으로 지정합니다. 다음 예제에서 Airline 및 FlightNo는 키 속성이지만 Gate는 키 속성이 아닙니다.
Dim flight1 = New With {Key .Airline = "Blue Yonder Airlines", _
Key .FlightNo = 3554, .Gate = "C33"}
새 익명 형식이 만들어질 때 Object에서 직접 상속됩니다. 컴파일러는 세 개의 상속된 멤버인 Equals, GetHashCode, 및 ToString을 재정의합니다. Equals 및 GetHashCode에 대해 생성되는 재정의 코드는 키 속성을 기반으로 합니다. 형식에 키 속성이 없는 경우 GetHashCode 및 Equals가 재정의되지 않습니다.
같음
두 개의 익명 형식 인스턴스는 같은 형식의 인스턴스이고 해당 키 속성의 값이 같은 경우 같습니다. 다음 예제에서 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))
두 인스턴스의 이름, 형식, 순서 및 값이 같더라도 키가 아닌 속성으로만 선언된 경우 이 두 인스턴스는 같지 않습니다. 키 속성이 없는 인스턴스는 자신하고만 같습니다.
두 익명 형식 인스턴스가 동일한 익명 형식의 인스턴스가 되는 조건에 대한 자세한 내용은 익명 형식을 참조하십시오.
해시 코드 계산
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"
참고 항목
작업
개념
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2008년 7월 |
"해시 코드 계산" 단원에 예제가 추가되었습니다. |
향상된 기능 관련 정보 |