형식 목록(Visual Basic)

제네릭 프로그래밍 요소에 대해 형식 매개 변수를 지정합니다. 여러 매개 변수는 쉼표로 구분됩니다. 다음은 한 형식 매개 변수에 대한 구문입니다.

구문

[genericmodifier] typename [ As constraintlist ]

부분

용어 정의
genericmodifier 선택 사항. 제네릭 인터페이스 및 대리자에서만 사용할 수 있습니다. Out 키워드를 사용하여 형식 공변을 선언하거나 In 키워드를 사용하여 반공변을 선언할 수 있습니다. 공변성(Covariance) 및 반공변성(Contravariance)을 참조하세요.
typename 필수입니다. 형식 매개 변수의 이름입니다. 이는 해당 형식 인수에서 제공하는 정의된 형식으로 대체되는 자리 표시자입니다.
constraintlist 선택 사항. typename에 대해 제공할 수 있는 데이터 형식을 제한하는 요구 사항 목록입니다. 여러 제약 조건이 있는 경우 중괄호({ })로 묶고 쉼표로 구분합니다. As 키워드를 사용하여 제약 조건 목록을 도입해야 합니다. 목록의 시작 부분에서 As를 한 번만 사용합니다.

설명

모든 제네릭 프로그래밍 요소는 하나 이상의 형식 매개 변수를 사용해야 합니다. 형식 매개 변수는 클라이언트 코드가 제네릭 형식의 인스턴스를 만들 때 지정하는 특정 형식(생성된 요소)에 대한 자리 표시자입니다. 제네릭 클래스, 구조체, 인터페이스, 프로시저 또는 대리자를 정의할 수 있습니다.

제네릭 형식을 정의하는 시기에 대한 자세한 내용은 Visual Basic의 제네릭 형식을 참조하세요. 형식 매개 변수 이름에 대한 자세한 내용은 선언된 요소 이름을 참조하세요.

규칙

  • 괄호. 형식 매개 변수 목록을 제공하는 경우 괄호로 묶어야 하며 Of 키워드를 사용하여 목록을 도입해야 합니다. 목록의 시작 부분에서 Of를 한 번만 사용합니다.

  • 제약 조건. 형식 매개 변수의 제약 조건 목록은 모든 조합에 다음 항목을 포함할 수 있습니다.

    • 모든 수의 인터페이스. 제공된 형식은 이 목록의 모든 인터페이스를 구현해야 합니다.

    • 최대 하나의 클래스. 제공된 형식은 해당 클래스에서 상속되어야 합니다.

    • New 키워드. 제공된 형식은 제네릭 형식에서 액세스할 수 있는 매개 변수가 없는 생성자를 노출해야 합니다. 이는 하나 이상의 인터페이스로 형식 매개 변수를 제한하는 경우에 유용합니다. 인터페이스를 구현하는 형식이 반드시 생성자를 노출하지는 않으며 생성자의 액세스 수준에 따라 제네릭 형식 내의 코드가 생성자에 액세스하지 못할 수 있습니다.

    • Class 키워드 또는 Structure 키워드입니다. Class 키워드는 제네릭 형식 매개 변수를 제한하여 이 매개 변수에 전달된 모든 형식 인수가 참조 형식(예: 문자열, 배열 또는 대리자 또는 클래스에서 만든 개체)이어야 합니다. Structure 키워드는 제네릭 형식 매개 변수를 제한하여 전달된 모든 형식 인수가 값 형식(예: 구조체, 열거형 또는 기본 데이터 형식)이어야 합니다. 동일한 constraintlistClassStructure 모두 포함할 수 없습니다.

    제공된 형식은 constraintlist에 포함된 모든 요구 사항을 충족해야 합니다.

    각 형식 매개 변수의 제약 조건은 다른 형식 매개 변수에 대한 제약 조건과 독립적입니다.

동작

  • 컴파일 시간 대체. 제네릭 프로그래밍 요소에서 생성된 형식을 만들 때 각 형식 매개 변수에 대해 정의된 형식을 제공합니다. Visual Basic 컴파일러는 제네릭 요소 내에서 typename이 발생할 때마다 모든 항목에 대해 제공된 형식을 대체합니다.

  • 제약 조건의 부재. 형식 매개 변수에 대한 제약 조건을 지정하지 않으면 코드는 해당 형식 매개 변수에 대한 개체 데이터 형식에서 지원하는 작업 및 멤버로 제한됩니다.

예 1

다음 예제에서는 사전에 새 항목을 추가하는 스켈레톤 함수를 포함하여 제네릭 사전 클래스의 기본 정의를 보여줍니다.

Public Class dictionary(Of entryType, keyType As {IComparable, IFormattable, New})
    Public Sub add(ByVal et As entryType, ByVal kt As keyType)
        Dim dk As keyType
        If kt.CompareTo(dk) = 0 Then
        End If
    End Sub
End Class

예제 2

dictionary는 제네릭이므로 이를 사용하는 코드는 각각 동일한 기능을 사용하지만 다른 데이터 형식에 따라 작동하는 다양한 개체를 만들 수 있습니다. 다음 예제에서는 String 항목 및 Integer 키를 사용하여 dictionary 개체를 만드는 코드 줄을 보여줍니다.

Dim dictInt As New dictionary(Of String, Integer)

예 3

다음 예제에서는 앞의 예제에서 생성된 동일한 기본 정의를 보여줍니다.

Public Class dictionary
    Public Sub Add(ByVal et As String, ByVal kt As Integer)
        Dim dk As Integer
        If kt.CompareTo(dk) = 0 Then
        End If
    End Sub
End Class

참고 항목