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

Обновлен: Ноябрь 2007

Служит для объявления имени, параметров и кода, определяющих процедуру Sub.

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] 
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Sub ]
    [ statements ]
End Sub

Компоненты

  • attributelist
    Необязательный компонент. См. Список атрибутов.

  • Partial
    Необязательный компонент. Служит для обозначения разделяемого метода. См. раздел Разделяемые методы.

  • accessmodifier
    Необязательный компонент. Может принимать следующие значения:

    См. раздел Уровни доступа в Visual Basic.

  • proceduremodifiers
    Необязательный компонент. Может принимать следующие значения:

  • Shared
    Необязательный компонент. См. раздел Shared.

  • Shadows
    Необязательный компонент. См. раздел Shadows.

  • name
    Обязательный компонент. Имя процедуры. См. раздел Имена объявленных элементов.

  • typeparamlist
    Необязательный компонент. Список параметров типов для универсальной процедуры. См. раздел Список типов.

  • parameterlist
    Необязательный компонент. Список имен локальных переменных, представляющих параметры этой процедуры. См. раздел Список параметров.

  • Implements
    Необязательный компонент. Указывает на то, что эта процедура реализует одну или несколько процедур Sub, каждая из которых определена в интерфейсе, реализованном в классе или структуре, где содержится эта процедура. См. раздел Оператор Implements.

  • implementslist
    Параметр обязателен, если указано ключевое слово Implements. Список реализуемых процедур Sub.

    implementedprocedure [ , implementedprocedure ... ]

    Каждая реализуемая процедура implementedprocedure имеет следующий синтаксис и компоненты:

    interface.definedname

    Компонент

    Описание

    interface

    Обязательный параметр. Имя интерфейса, реализуемого классом или структурой, где содержится данная процедура.

    definedname

    Обязательный параметр. Имя, под которым процедура определена в interface.

  • Handles
    Необязательный параметр. Указывает, что эта процедура может обрабатывать одно или несколько конкретных событий. См. раздел Handles.

  • eventlist
    Параметр обязателен, если указано ключевое слово Handles. Список событий, которые обрабатывает данная процедура.

    eventspecifier [ , eventspecifier ... ]

    Каждый описатель события eventspecifier имеет следующий синтаксис и компоненты:

    eventvariable.event

    Компонент

    Описание

    eventvariable

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

    event

    Обязательный параметр. Имя события, которое обрабатывает данная процедура.

  • statements
    Необязательный параметр. Блок операторов для выполнения в этой процедуре.

  • EndSub
    Завершает определение данной процедуры.

Заметки

Весь исполняемый код должен быть внутри процедуры. Процедуры Sub используются в случаях, когда не требуется возвращать значение вызывающему коду. В случаях, когда нужно возвращать значение, используются процедуры Function.

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

Для процедур Sub по умолчанию установлен общий доступ. Уровни доступа можно настроить с помощью модификаторов доступа.

Правила

  • Реализация. Если в процедуре используется ключевое слово Implements, то в содержащем ее классе или структуре должен присутствовать оператор Implements, следующий сразу за оператором Class или Structure. Оператор Implements должен включать все интерфейсы, указанные в implementslist. Тем не менее, имя, под которым в интерфейсе определяется Sub (в definedname), не обязано совпадать с именем данной процедуры (в name).

Поведение

  • Возвращение из процедуры. Когда процедура Sub возвращает управление вызывающему коду, выполняется оператор, следующий за оператором, вызвавшим процедуру.

    Операторы Exit Sub и Return вызывают немедленный выход из процедуры Sub. В любом месте процедуры может использоваться любое количество операторов Exit Sub и Return; операторы Exit Sub и Return также можно использовать совместно.

    В следующем примере показан возврат из процедуры Sub:

    Sub mySub(ByVal q As String)
        Return
    End Sub 
    
  • Вызов процедуры. Процедура Sub, как и процедура Function, является отдельной процедурой, которая может принимать параметры и выполнять последовательность операторов. Тем не менее, в отличие от процедуры Function, которая возвращает значение, процедура Sub не может использоваться в выражениях.

    Вызов процедуры Sub осуществляется с помощью имени процедуры, за которым следует список аргументов, заключенный в круглые скобки. Скобки могут опускаться только в том случае, если процедура не имеет аргументов. Тем не менее, код является более удобочитаемым, если всегда использовать круглые скобки.

    Еще один способ вызова процедуры Sub состоит в использовании оператора Call. Это может улучшить удобочитаемость кода.

Устранение неполадок

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

Пример

В следующем примере оператор Sub используется для определения имени, параметров и кода, формирующих тело процедуры Sub.

Sub computeArea(ByVal length As Double, ByVal width As Double)
    ' Declare local variable.
    Dim area As Double
    If length = 0 Or width = 0 Then
        ' If either argument = 0 then exit Sub immediately.
        Exit Sub
    End If
    ' Calculate area of rectangle.
    area = length * width
    ' Print area to Immediate window.
    Debug.WriteLine(area)
End Sub

См. также

Задачи

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

Устранение неполадок в процедурах

Практическое руководство. Создание частичного метода (Visual Basic)

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

Массивы параметров

Разделяемые методы

Ссылки

Оператор Implements

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

Список параметров

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

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

Of