Необязательные параметры (Visual Basic)
Некоторые параметры процедуры можно задать как необязательные, тем самым указывая, что их можно не задавать при вызове процедуры.Необязательные параметры обозначены ключевым словом Optional в определении процедуры.Действуют следующие правила.
Для каждого необязательного параметра в определении процедуры должно быть указано значение по умолчанию.
Значение по умолчанию для необязательного параметра следует задавать в виде константного выражения.
Каждый параметр, идущий в определении процедуры после необязательного, также должен быть необязательным.
Ниже приведен синтаксис объявления процедуры с необязательным параметром:
Sub sub name(ByVal parameter 1 As data type 1, Optional ByVal parameter 2 As data type 2 = default value)
Вызов процедур с необязательными параметрами
При вызове процедуры с необязательным параметром можно опускать этот аргумент.Если он не задан, процедура будет использовать значение по умолчанию, объявленное для этого параметра.
Можно опустить сразу несколько необязательных аргументов в списке аргументов, ставя несколько запятых подряд для обозначения их позиций.Ниже приводится пример вызова процедуры, при котором задаются первый и четвертый аргументы, а второй и третий пропускаются.
sub name(argument 1, , , argument 4)
В следующем примере происходит несколько вызовов функции MsgBox.У функции MsgBox есть один обязательный параметр и два необязательных параметра.
Первый вызов поставкам MsgBox все 3 аргумента в том порядке, в котором 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 в качестве значения по умолчанию, при условии, что это не является ожидаемым значением аргумента.
Необязательные параметры и перегрузка
Другой способ определения процедуры с необязательными параметрами состоит в использовании перегрузки.Если имеется один необязательный параметр, то можно определить две перегруженные версии процедуры, одна принимает параметр, а другая — нет.Такой подход становится более сложным с увеличением числа необязательных параметров.Однако, его преимущество заключается в том, что он позволяет точно знать, все ли необязательные аргументы заданы в вызывающей программе.
См. также
Ссылки
Основные понятия
Параметры и аргументы процедуры (Visual Basic)
Передача аргументов по значению и по ссылке (Visual Basic)
Передача аргументов по позиции и по имени (Visual Basic)