Оператор 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
Необязательный компонент. Может принимать следующие значения:Protected Friend
См. раздел Уровни доступа в Visual Basic.
proceduremodifiers
Необязательный компонент. Может принимать следующие значения:MustOverride Overrides
NotOverridable Overrides
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)