Список типов
Обновлен: Ноябрь 2007
Задает параметры-типы для стандартного программного элемента Несколько параметров разделяются запятыми. Ниже представлен синтаксис для одного параметра-типа.
typename [ As constraintlist ]
Компоненты
typename
Обязательный. Имя параметра-типа. Это заполнитель, заменяемый определенным типом, предоставляемым соответствующим аргументом типа.constraintlist
Необязательный. Список требований, ограничивающих тип данных, который может быть задан для typename. Если имеется несколько ограничений, заключайте их в фигурных скобках ({ }) и разделяйте их запятыми. В начале списка ограничений необходимо указать ключевое слово As. As используется только один раз — в начале списка.
Заметки
Каждый стандартный программный элемент должен получить хотя бы один параметр-тип. Параметр-тип является заполнителем для определенного типа (построенного элемента), который задается в коде клиента при создании экземпляра стандартного типа. Можно определить стандартный класс, структуру, интерфейс, процедуру или делегат.
Дополнительные сведения об определении стандартного типа содержатся в разделе Универсальные типы в Visual Basic. Дополнительные сведения об именах параметров-типов см. в разделе Имена объявленных элементов.
Правила
Круглые скобки. Предоставляемый список параметров-типов необходимо заключить в круглые скобки, а список следует начать с ключевого словаOf. Of используется только один раз — в начале списка.
Ограничения. Список ограничений для параметра-типа может включать следующие элементы в любых сочетаниях.
Любое число интерфейсов. Указанный тип должен реализовать каждый интерфейс в этом списке.
Не более одного класса. Указанный тип должен наследоваться из этого класса.
Ключевое слово New (Visual Basic). Указанный тип должен предоставлять конструктор без параметров, к которому стандартный тип имеет доступ. Это полезно, если параметр-тип ограничивается с помощью одного или нескольких интерфейсов. Тип, который реализует интерфейсы, необязательно должен предоставлять конструктор, и в зависимости от уровня доступа конструктора код стандартного типа может не иметь доступа к нему.
Любое из двух ключевых слов: Class (Visual Basic) или Структура (Visual Basic). Если использовать Class, предоставленный тип должен быть ссылочным типом. Если использовать Structure, предоставленный тип должен быть типом значения. Нельзя включать вместе Class и Structure в одном и том же constraintlist.
Указанный тип должен удовлетворять каждому требованию из constraintlist.
Ограничения для каждого параметра-типа не зависят от ограничений, наложенных на другие параметры-типы.
Поведение
Подстановка времени компиляции. При создании сформированного типа из стандартного программного элемента каждому параметру-типу предоставляется определенный тип. Компилятор Visual Basic подставляет данный предоставленный тип для каждого вхождения typename в стандартном элементе.
Отсутствие ограничений. Если ограничения для параметра-типа не указаны, код ограничивается операциями и членами, поддерживаемыми Тип данных Object для данного параметра-типа.
Пример
Пример показывает каркас определения класса универсального словаря, включая каркас функции для добавления новой записи в словарь.
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
Поскольку dictionary является универсальным, код, использующий его, может создать различные объекты, каждый из которых будет иметь те же функциональные возможности, но выполняется для другого типа данных. В следующем примере показана строка кода, которая создает объект dictionary с входными данными String и ключами Integer.
Dim dictInt As New dictionary(Of String, Integer)
В следующем примере рассматривается каркас определения, созданный в предыдущем примере.
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
См. также
Задачи
Практическое руководство. Использование универсального класса