Список параметров (Visual Basic)
Задает параметры, которые ожидает процедура при вызове. Несколько параметров разделены запятыми. Ниже приведен синтаксис для одного параметра.
Синтаксис
[ <attributelist> ] [ Optional ] [{ ByVal | ByRef }] [ ParamArray ]
parametername[( )] [ As parametertype ] [ = defaultvalue ]
Детали
attributelist
Необязательно. Список атрибутов, применяемых к этому параметру. Необходимо заключить список атрибутов в угловые скобки ("<
" и ">
").
Optional
Необязательно. Указывает, что этот параметр не требуется при вызове процедуры.
ByVal
Необязательно. Указывает, что процедура не может заменить или переназначить элемент переменной, лежащий в основе соответствующего аргумента в вызывающем коде.
ByRef
Необязательно. Указывает, что процедура может изменить базовый элемент переменной в вызывающем коде так же, как сам вызывающий код.
ParamArray
Необязательно. Указывает, что последний параметр в списке параметров является необязательным массивом элементов указанного типа данных. Это позволяет вызывающму коду передавать произвольное количество аргументов в процедуру.
parametername
Обязательный. Имя локальной переменной, представляющей параметр.
parametertype
Обязательный параметр, если Option Strict
имеет значение On
. Тип данных локальной переменной, представляющей параметр.
defaultvalue
Требуется для Optional
параметров. Любое константное или константное выражение, которое оценивает тип данных параметра. Если тип имеет тип Object
или класс, интерфейс, массив или структуру, значение по умолчанию может быть Nothing
только .
Замечания
Параметры окружены скобками и разделены запятыми. Параметр можно объявить с любым типом данных. Если не указать parametertype
, по умолчанию используется Object
значение .
Когда вызывающий код вызывает процедуру, он передает аргумент каждому обязательному параметру. Дополнительные сведения см. в разделе "Различия между параметрами и аргументами".
Аргумент вызывающего кода передается каждому параметру, является указателем на базовый элемент в вызывающем коде. Если этот элемент является неизменяемым (константой, литеральным, перечислением или выражением), его невозможно изменить. Если это элемент переменной (объявленная переменная, поле, свойство, элемент массива или структура), вызывающий код может изменить его. Дополнительные сведения см. в разделе "Различия между модификируемыми и неизменяемыми аргументами".
Если элемент переменной передается ByRef
, процедура также может изменить ее. Дополнительные сведения см. в разделе "Различия между передачей аргумента по значению и по ссылке".
Правила
Скобки. Если указать список параметров, необходимо заключить его в скобки. Если параметров нет, можно по-прежнему использовать скобки, включающие пустой список. Это повышает удобочитаемость кода, прояснив, что элемент является процедурой.
Необязательные параметры. При использовании
Optional
модификатора для параметра все последующие параметры в списке также должны быть необязательными и объявляться с помощьюOptional
модификатора.Каждое
defaultvalue
необязательное объявление параметра должно указать предложение.Дополнительные сведения см. в разделе "Необязательные параметры".
Массивы параметров. Для параметра необходимо указать
ByVal
ParamArray
.Нельзя использовать оба
Optional
параметра иParamArray
в одном списке параметров.Дополнительные сведения см. в разделе "Массивы параметров".
Передача механизма. Механизм по умолчанию для каждого аргумента— это
ByVal
означает, что процедура не может изменить базовый элемент переменной. Однако если элемент является ссылочным типом, процедура может изменить содержимое или члены базового объекта, даже если он не может заменить или переназначить сам объект.Имена параметров. Если тип данных параметра является массивом, следуйте за
parametername
скобками немедленно. Дополнительные сведения о именах параметров см. в разделе "Объявленные имена элементов".
Пример
В следующем примере показана Function
процедура, определяющая два параметра.
Public Function HowMany(ByVal ch As Char, ByVal st As String) As Integer
End Function
Dim howManyA As Integer = HowMany("a"c, "How many a's in this string?")