Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Некоторые аргументы процедуры можно задать как необязательные, тем самым указывая, что их можно не задавать при вызове процедуры. Необязательные параметры указываются Optional
ключевое слово в определении процедуры. Применяются следующие правила:
Для каждого необязательного параметра в определении процедуры должно быть указано значение по умолчанию.
Значение по умолчанию для необязательного параметра следует задавать в виде константного выражения.
Каждый параметр, идущий в определении процедуры после необязательного, также должен быть необязательным.
Ниже приведен синтаксис объявления процедуры с необязательным параметром:
Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)
Вызов процедур с необязательными параметрами
При вызове процедуры с необязательным параметром можно опускать этот аргумент. Если он не задан, процедура будет использовать значение по умолчанию, объявленное для параметра.
Можно опустить сразу несколько необязательных аргументов в списке аргументов, ставя несколько запятых подряд для обозначения их позиций. Ниже приводится пример вызова процедуры, при котором задаются первый и четвертый аргументы, а второй и третий пропускаются.
Sub name(argument 1, , , argument 4)
В следующем примере происходит несколько вызовов функции MsgBox
. У функции MsgBox
есть один обязательный параметр и два необязательных параметра.
При первом вызове MsgBox
указываются все три аргумента в том порядке, в котором они определены в MsgBox
. При втором вызове указывается только обязательный аргумент. При третьем и четвертом вызове указываются первый и третий аргументы. Третий вызов указывает аргумент по позиции, а четвертый — по имени.
MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")
Определение наличия необязательного аргумента
Процедура во время выполнения не может отличить пропущенный аргумент от аргумента, для которого в вызывающем коде явным образом задано значение по умолчанию. Если такое различение существенно, можно задать в качестве значения по умолчанию значение, которое вряд ли будет использоваться. Следующая процедура определяет необязательный параметр office
и проверяет его значение по умолчанию, чтобы узнать, QJZ
был ли он опущен в вызове:
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub
Если необязательный параметр имеет ссылочный тип, например, String
, то можно использовать Nothing
в качестве значения по умолчанию, при условии, что это не является ожидаемым значением аргумента.
Необязательные параметры и перегрузка
Другой способ определения процедуры с необязательными параметрами состоит в использовании перегрузки. Если имеется один необязательный параметр, то можно определить две перегруженные версии процедуры, одна принимает параметр, а другая — нет. Такой подход становится более сложным с увеличением числа необязательных параметров. Однако, его преимущество заключается в том, что он позволяет точно знать, все ли необязательные аргументы заданы в вызывающей программе.