Список типов (Visual Basic)

Задает параметры типа для универсального элемента программирования. Несколько параметров разделены запятыми. Ниже приведен синтаксис для одного параметра типа.

Синтаксис

[genericmodifier] typename [ As constraintlist ]

Детали

Термин Определение
genericmodifier Необязательно. Можно использовать только в универсальных интерфейсах и делегатах. Можно объявить ковариантный тип с помощью ключевое слово Out или контравариантного с помощью ключевое слово in. См. раздел Ковариация и контрвариация.
typename Обязательный. Имя параметра типа. Это заполнитель, который следует заменить определенным типом, предоставленным соответствующим аргументом типа.
constraintlist Необязательно. Список требований, ограничивающих тип данных, для который можно указать typename. Если у вас несколько ограничений, заключите их в фигурные скобки ({ }) и разделите их запятыми. Необходимо ввести список ограничений с помощью ключевое слово. Вы используете As только один раз в начале списка.

Замечания

Каждый универсальный элемент программирования должен принимать по крайней мере один параметр типа. Параметр типа — это заполнитель определенного типа ( созданный элемент), который код клиента указывает при создании экземпляра универсального типа. Можно определить универсальный класс, структуру, интерфейс, процедуру или делегат.

Дополнительные сведения о том, когда следует определить универсальный тип, см. в разделе "Универсальные типы" в Visual Basic. Дополнительные сведения о именах параметров типа см. в разделе "Объявленные имена элементов".

Правила

  • Скобки. Если вы предоставляете список параметров типа, необходимо заключить его в скобки, и необходимо ввести список с ключевое слово. Вы используете Of только один раз в начале списка.

  • Зависимости. Список ограничений для параметра типа может включать следующие элементы в любое сочетание:

    • Любое количество интерфейсов. Указанный тип должен реализовывать каждый интерфейс в этом списке.

    • По крайней мере один класс. Указанный тип должен наследоваться от этого класса.

    • ключевое слово New; Указанный тип должен предоставить конструктор без параметров, к которому может получить доступ универсальный тип. Это полезно, если вы ограничиваете параметр типа одним или несколькими интерфейсами. Тип, реализующий интерфейсы, не обязательно предоставляет конструктор, и в зависимости от уровня доступа конструктора код в универсальном типе может не иметь доступа к нему.

    • Class Либо ключевое слово, либо Structure ключевое слово. Class Ключевое слово ограничивает параметр универсального типа, чтобы требовать, чтобы любой аргумент типа, переданный ему, был ссылочным типом, например строкой, массивом или делегатом или объектом, созданным из класса. Structure Ключевое слово ограничивает параметр универсального типа, чтобы требовать, чтобы любой аргумент типа, переданный ему, был типом значения, например структурой, перечислением или начальным типом данных. Вы не можете включить оба Class и в одно и Structure то же constraintlist.

    Указанный тип должен соответствовать каждому требованию, в который вы входите 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 это универсальный код, который использует его, может создавать различные объекты из него, каждый из которых имеет одинаковые функциональные возможности, но действует с другим типом данных. В следующем примере показана строка кода, которая создает dictionary объект с String записями и Integer ключами.

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

См. также