Список типов (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