Оператор Function (Visual Basic)
Обновлен: Ноябрь 2007
Объявляет имя, параметры и код, определяющий процедуру Function.
Примечание. |
---|
Visual Basic 2008 представляет лямбда-выражения, позволяющие определять выражения функций в строке. Дополнительные сведения см. в разделах Выражение функции и Лямбда-выражения. |
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Части
attributelist
Необязательно. См. Список атрибутов.accessmodifier
Необязательно. Может принимать следующие значения:Protected Friend
См. раздел Уровни доступа в Visual Basic.
proceduremodifiers
Необязательный компонент. Может принимать следующие значения:MustOverride Overrides
NotOverridable Overrides
Shared
Необязательный компонент. См. раздел Shared.Shadows
Необязательный компонент. См. раздел Shadows.name
Обязательный компонент. Имя процедуры. См. раздел Имена объявленных элементов.typeparamlist
Необязательный компонент. Список параметров типов для универсальной процедуры. См. раздел Список типов.parameterlist
Необязательный компонент. Список имен локальных переменных, представляющих параметры этой процедуры. См. раздел Список параметров.returntype
Требуется, если для Option Strict установлено значение On. Тип данных возвращаемого этой процедурой значения.Implements
Дополнительный. Указывает, что эта процедура реализует одну или несколько Function процедур, каждая из которых определена в интерфейсе, реализованном классом или структурой, которая содержит эту процедуру. См. раздел Оператор Implements.implementslist
Параметр обязателен, если указано ключевое слово Implements. Список реализуемых процедур Function.implementedprocedure [ , implementedprocedure ... ]
Каждая реализуемая процедура implementedprocedure имеет следующий синтаксис и компоненты:
interface.definedname
Компонент
Описание
interface
Обязательный параметр. Имя интерфейса, реализуемого классом или структурой, где содержится данная процедура.
definedname
Обязательный параметр. Имя, под которым процедура определена в interface.
Handles
Необязательный параметр. Указывает, что эта процедура может обрабатывать одно или несколько конкретных событий. См. раздел Handles.eventlist
Параметр обязателен, если указано ключевое слово Handles. Список событий, которые обрабатывает данная процедура.eventspecifier [ , eventspecifier ... ]
Каждый описатель события eventspecifier имеет следующий синтаксис и компоненты:
eventvariable.event
Компонент
Описание
eventvariable
Обязательный параметр. Объектная переменная, объявленная с типом данных класса или структуры, где создается событие.
event
Обязательный параметр. Имя события, которое обрабатывает данная процедура.
statements
Дополнительный. Блок операторов, выполняемых внутри этой процедуры.EndFunction
Завершает определение данной процедуры.
Заметки
Весь исполняемый код должен быть внутри процедуры. Каждая процедура в свою очередь объявляется внутри класса, структуры или модуля, называемых содержащим классом, структурой или модулем.
При необходимости вернуть значение в вызывающий код следует использовать процедуру Function. Если такой необходимости нет, следует использовать процедуру Sub.
Процедуру Function можно определить только на уровне модуля. Это означает, что контекст объявления для функции должен быть классом, структурой, модулем или интерфейсом и не может быть исходным файлом, пространством, процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Для процедур Function по умолчанию установлен общий доступ. Уровни доступа можно настроить с помощью модификаторов доступа.
Для вызова значения, возвращаемого функцией, процедуру Function следует располагать в правой части выражений. Процедура Function применяется точно так же, как и любые библиотечные функции, такие как Sqrt, Cos, или ChrW.
Вызов процедуры Function осуществляется с помощью имени процедуры, за которым следует список аргументов, заключенный в круглые скобки. Скобки могут опускаться только в том случае, если процедура не имеет аргументов. Однако, код является более удобочитаемым, если всегда включать круглые скобки.
Функция также может быть вызвана при помощи оператора Call; в этом случае возвращаемое значение не обрабатывается.
Правила
Возвращаемый тип. При помощи оператора Function можно объявлять тип данных возвращаемого значения. Можно указать любой тип данных или имя перечисления, структуры, класса или интерфейса.
Если returntype не указан, процедура возвратит Object.
Реализация. Если эта процедура использует ключевое слово Implements, то оператор Implements в содержащем классе или структуре также должен использоваться сразу после Class или Structure. Оператор Implements должен включать все интерфейсы, указанные в implementslist. Однако имя, которым интерфейс определяет Function (в definedname) не обязательно должно совпадать с именем данной процедуры (в name).
Поведение
Возвращение из процедуры. Когда процедура Function возвращает результат в вызывающий код, выполняется оператор, следующий за оператором, из которого была вызвана процедура.
Операторы Exit Function и Return вызывают немедленный выход из процедуры Function. Любое количество операторов Exit Function и Return может использоваться в любом месте процедуры, и их также можно использовать вместе с операторами Exit Function и Return.
Возвращаемое значение. Для возврата значения функции можно присвоить значение имени функции или включить его в оператор Return. В следующем примере возвращаемое значение присваивается имени функции myFunction и затем используется оператором Exit Function для возврата.
Function myFunction(ByVal j As Integer) As Double myFunction = 3.87 * j Exit Function End Function
Если используется Exit Function без присвоения значения для name, процедура возвращает значение по умолчанию для типа данных, указанного в returntype. Если returntype не указан, процедура возвращает Nothing, значение по умолчанию для Object.
Оператор Return одновременно назначает возвращаемое значение и выходит из функции. Это показано в следующем примере.
Function myFunction(ByVal j As Integer) As Double Return 3.87 * j End Function
Устранение неполадок
- Порядок выполнения. Visual Basic иногда меняет местами содержащиеся в коде арифметические выражения для повышения внутренней эффективности выполнения программы. По этой причине не следует использовать процедуру Function в арифметическом выражении, если эта процедура изменяет значения входящих в выражение переменных.
Пример
В следующем примере оператор Function используется для объявления имени, параметров и кода, который формирует тело процедуры Function. Модификатор ParamArray позволяет функции принять переменное число аргументов.
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
В следующем примере вызывается функция, объявленная в предыдущем примере.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.
См. также
Задачи
Практическое руководство. Использование универсального класса
Устранение неполадок в процедурах