Поделиться через


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

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

[genericmodifier] typename [ As constraintlist ]

Части

Термин

Определение

genericmodifier

Необязательный. Может использоваться только в универсальных интерфейсах и делегатах. Можно объявить ковариант типа с помощью ключевого слова Out или контрвариант с помощью ключевого слова In. Дополнительные сведения см. в разделе Ковариация и контравариация (C# и Visual Basic).

typename

Обязательный. Имя параметра-типа. Это заполнитель, заменяемый определенным типом, предоставляемым соответствующим аргументом типа.

constraintlist

Необязательный. Список требований, ограничивающих тип данных, который может быть задан для typename. Если имеется несколько ограничений, заключайте их в фигурных скобках ({ }) и разделяйте их запятыми. В начале списка ограничений необходимо указать ключевое слово As. As используется только один раз — в начале списка.

Заметки

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

Дополнительные сведения об определении стандартного типа содержатся в разделе Универсальные типы в Visual Basic (Visual Basic). Дополнительные сведения об именах параметров-типов см. в разделе Имена объявленных типов (Visual Basic).

Правила

  • Круглые скобки. Предоставляемый список параметров-типов необходимо заключить в круглые скобки, а список следует начать с ключевого словаOf. Of используется только один раз — в начале списка.

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

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

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

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

    • Любое из двух ключевых слов: Class или Structure. Ключевое слово 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

См. также

Задачи

Практическое руководство. Использование универсального класса (Visual Basic)

Ссылки

Предложение Of (Visual Basic)

Оператор New (Visual Basic)

Тип данных Object

Оператор Function (Visual Basic)

Оператор Structure

Оператор Sub (Visual Basic)

In (универсальный модификатор) (Visual Basic)

Out (универсальный модификатор) (Visual Basic)

Основные понятия

Уровни доступа в Visual Basic

Другие ресурсы

Ковариация и контравариация (C# и Visual Basic)