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을 재정의합니다. Equals 및 GetHashCode에 대해 생성된 대체 코드는 키 특성을 기반으로 합니다. 형식에 키 속성이 없으면 GetHashCode 및 Equals가 재정의되지 않습니다.
Equality
두 개의 무명 형식 인스턴스가 동일한 형식의 인스턴스이고 해당 키 속성 값이 같은 경우 동일합니다. 다음 예에서 flight2
는 무명 형식의 동일한 인스턴스이고 해당 키 속성에 대해 일치하는 값을 갖고 있기 때문에 이전 예의 flight1
과 같습니다. 그러나 flight3
은 키 속성 FlightNo
의 값이 다르기 때문에 flight1
과 동일하지 않습니다. 인스턴스 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"
참고 항목
.NET