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

Объявляет имя класса и вводит определение переменных, свойств, событий и процедур, составляющих класс.

Синтаксис

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _  
Class name [ ( Of typelist ) ]  
    [ Inherits classname ]  
    [ Implements interfacenames ]  
    [ statements ]  
End Class  

Детали

Термин Определение
attributelist Необязательно. См . список атрибутов.
accessmodifier Необязательно. Может применяться один из перечисленных ниже типов.

- Открытый
- Protected
- Friend
- Частное
- Protected Friend
- Private Protected

См. раздел Access levels in Visual Basic.
Shadows Необязательно. См . тени.
MustInherit Необязательно. См . раздел MustInherit.
NotInheritable Необязательно. См . раздел NotInheritable.
Partial Необязательно. Указывает частичное определение класса. См . раздел "Частичный".
name Обязательный. Имя этого класса. См. раздел Declared Element Names.
Of Необязательно. Указывает, что это универсальный класс.
typelist Требуется, если вы используете ключевое слово. Список параметров типа для этого класса. См . список типов.
Inherits Необязательно. Указывает, что этот класс наследует члены другого класса. См . инструкцию "Наследование".
classname Требуется, если вы используете инструкцию Inherits . Имя класса, от которого наследуется этот класс.
Implements Необязательно. Указывает, что этот класс реализует члены одного или нескольких интерфейсов. См . инструкцию "Реализация".
interfacenames Требуется, если вы используете инструкцию Implements . Имена интерфейсов, реализуемых этим классом.
statements Необязательно. Операторы, определяющие члены этого класса.
End Class Обязательный. Class Завершает определение.

Замечания

Оператор Class определяет новый тип данных. Класс является основным стандартным блоком объектно-ориентированного программирования (OOP). Дополнительные сведения см. в разделе "Объекты и классы".

Можно использовать Class только на уровне пространства имен или модуля. Это означает, что контекст объявления для класса должен быть исходным файлом, пространством имен, классом, структурой, модулем или интерфейсом и не может быть процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.

Каждый экземпляр класса имеет время существования независимо от всех остальных экземпляров. Это время существования начинается, когда оно создается предложением New Operator или функцией, например CreateObject. Он заканчивается, когда все переменные, указывающие на экземпляр, были заданы как Nothing или экземпляры других классов.

Классы по умолчанию используют доступ "Друг ". Уровни доступа можно настроить с помощью модификаторов доступа. Дополнительные сведения см. в разделе "Уровни доступа" в Visual Basic.

Правила

  • Вложения. Можно определить один класс внутри другого. Внешний класс называется содержащимся классом, а внутренний класс называется вложенным классом.

  • Наследование. Если класс использует инструкцию "Наследование", можно указать только один базовый класс или интерфейс. Класс не может наследовать от нескольких элементов.

    Класс не может наследовать от другого класса с более строгим уровнем доступа. Например, Public класс не может наследоваться от Friend класса.

    Класс не может наследоваться от класса, вложенного в него.

  • Реализация. Если класс использует оператор Implements, необходимо реализовать каждый элемент, определенный каждым интерфейсом, указанным в interfacenames. Исключением из этого является повторное выполнение элемента базового класса. Дополнительные сведения см. в разделе "Повторная реализация".

  • Свойство по умолчанию. Класс может указать не более одного свойства в качестве свойства по умолчанию. Дополнительные сведения см. в разделе "По умолчанию".

Поведение

  • Уровень доступа. В классе можно объявить каждый член с собственным уровнем доступа. Члены класса по умолчанию являются общедоступным доступом, за исключением переменных и констант, которые по умолчанию являются частным доступом. Если класс имеет более ограниченный доступ, чем один из его членов, уровень доступа к классу имеет приоритет.

  • Область. Класс находится в область в пределах своего пространства имен, класса, структуры или модуля.

    Область каждого члена класса — это весь класс.

    Время существования. Visual Basic не поддерживает статические классы. Функциональный эквивалент статического класса предоставляется модулем. Дополнительные сведения см. в инструкции модуля.

    Члены класса имеют время существования в зависимости от того, как и где они объявлены. Дополнительные сведения см. в разделе "Время существования" в Visual Basic.

  • Квалификации. Код за пределами класса должен указать имя члена с именем этого класса.

    Если код внутри вложенного класса делает неквалифицированную ссылку на элемент программирования, Visual Basic выполняет поиск элемента сначала в вложенном классе, а затем в его содержательном классе и т. д. до самого внешнего содержащего элемента.

Классы и модули

Эти элементы имеют много сходств, но есть и некоторые важные различия.

  • Терминология. Предыдущие версии Visual Basic распознают два типа модулей: модули классов (CLS-файлы) и стандартные модули (BAS-файлы). Текущая версия вызывает эти классы и модули соответственно.

  • Общие члены. Вы можете контролировать, является ли член класса общим или членом экземпляра.

  • Ориентация объекта. Классы являются объектно-ориентированными, но модули не являются. Можно создать один или несколько экземпляров класса. Дополнительные сведения см. в разделе "Объекты и классы".

Пример

В следующем примере оператор используется Class для определения класса и нескольких членов.

Class BankAccount
    Shared interestRate As Decimal
    Private accountBalance As Decimal
    Public holdOnAccount As Boolean = False

    Public ReadOnly Property Balance() As Decimal
        Get
            Return accountBalance
        End Get
    End Property

    Public Sub PostInterest()
        accountBalance = accountBalance * (1 + interestRate)
    End Sub

    Public Sub PostDeposit(ByVal amountIn As Decimal)
        accountBalance = accountBalance + amountIn
    End Sub

    Public Sub PostWithdrawal(ByVal amountOut As Decimal)
        accountBalance = accountBalance - amountOut
    End Sub
End Class

См. также