익명 형식 정의(Visual Basic)
익명 형식의 인스턴스 선언에 대한 응답으로 컴파일러에서는 형식에 대해 지정된 속성을 포함하는 새 클래스 정의를 만듭니다.
컴파일러 생성 코드
product의 다음 정의에 대해서 컴파일러에서는 Name, Price 및 OnHand 속성을 포함하는 새 클래스 정의를 만듭니다.
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", Key .Price = 1.29, .OnHand = 24}
클래스 정의에는 다음과 유사한 속성 정의가 포함되어 있습니다.키 속성에 대한 Set 메서드는 없습니다.키 속성의 값은 읽기 전용입니다.
Public Class $Anonymous1
Private _name As String
Private _price As Double
Private _onHand As Integer
Public ReadOnly Property Name() As String
Get
Return _name
End Get
End Property
Public ReadOnly Property Price() As Double
Get
Return _price
End Get
End Property
Public Property OnHand() As Integer
Get
Return _onHand
End Get
Set(ByVal Value As Integer)
_onHand = Value
End Set
End Property
End Class
또한 익명 형식 정의에는 기본 생성자가 포함되어 있습니다.매개 변수를 필요로 하는 생성자는 허용되지 않습니다.
익명 형식 선언에 적어도 하나의 키 속성이 포함되어 있으면 형식 정의는 Object: Equals, GetHashCode 및 ToString에서 상속된 세 개의 멤버를 재정의합니다.선언된 키 속성이 없으면 ToString만 재정의됩니다.재정의는 다음과 같은 기능을 제공합니다.
두 개의 익명 형식 인스턴스가 동일한 인스턴스이거나 다음과 같은 조건을 만족하면 Equals에서 True를 반환합니다.
두 개의 익명 형식 인스턴스가 동일한 수의 속성을 갖는 경우
속성이 동일한 이름과 유추된 형식 갖고 동일한 순서로 선언된 경우이름을 비교할 때 대/소문자를 구분하지 않습니다.
적어도 하나의 속성이 키 속성이고 Key 키워드가 동일한 속성에 적용된 경우
키 속성의 각 해당 쌍을 비교했을 때 True를 반환하는 경우
예를 들어 다음 예제에서 Equals는 employee01 및 employee08에 대해 True만 반환합니다.각 줄 앞의 주석은 새 인스턴스가 employee01과 일치하지 않는 이유를 설명합니다.
Dim employee01 = New With {Key .Name = "Bob", Key .Category = 3, .InOffice = False} ' employee02 has no InOffice property. Dim employee02 = New With {Key .Name = "Bob", Key .Category = 3} ' The first property has a different name. Dim employee03 = New With {Key .FirstName = "Bob", Key .Category = 3, .InOffice = False} ' Property Category has a different value. Dim employee04 = New With {Key .Name = "Bob", Key .Category = 2, .InOffice = False} ' Property Category has a different type. Dim employee05 = New With {Key .Name = "Bob", Key .Category = 3.2, .InOffice = False} ' The properties are declared in a different order. Dim employee06 = New With {Key .Category = 3, Key .Name = "Bob", .InOffice = False} ' Property Category is not a key property. Dim employee07 = New With {Key .Name = "Bob", .Category = 3, .InOffice = False} ' employee01 and employee 08 meet all conditions for equality. Note ' that the values of the non-key field need not be the same. Dim employee08 = New With {Key .Name = "Bob", Key .Category = 2 + 1, .InOffice = True} ' Equals returns True only for employee01 and employee08. Console.WriteLine(employee01.Equals(employee08))
GetHashcode에서는 고유한 GetHashCode 알고리즘을 제공합니다.알고리즘에서는 키 속성만을 사용하여 해시 코드를 계산합니다.
ToString에서는 다음 예제와 같이 연결된 속성 값의 문자열을 반환합니다.키 속성 및 키가 아닌 속성 모두 포함됩니다.
Console.WriteLine(employee01.ToString()) Console.WriteLine(employee01) ' The preceding statements both display the following: ' { Name = Bob, Category = 3, InOffice = False }
명시적으로 명명된 익명 형식 속성은 이러한 생성된 메서드와 충돌하지 않습니다.즉, .Equals, .GetHashCode 또는 .ToString을 사용하여 속성의 이름을 지정할 수 없습니다.
또한 적어도 하나의 키 속성을 포함하고 있는 익명 형식 선언에서는 T가 익명 형식의 형식인 System.IEquatable<T> 인터페이스를 구현합니다.
[!참고]
익명 형식 선언은 익명 형식 선언이 동일한 어셈블리에서 발생한 경우, 익명 형식 선언의 속성이 동일한 이름과 유추된 형식을 갖는 경우, 속성이 동일한 순서로 선언된 경우 및 동일한 속성이 키 속성으로 표시된 경우에만 동일한 익명 형식을 만듭니다.
참고 항목
작업
방법: 익명 형식 선언에서 속성 이름 및 형식 유추(Visual Basic)