Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Можно указать, что параметр процедуры необязателен, и при вызове процедуры аргумент не должен быть предоставлен.
Необязательные параметры указываются ключевым словом 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
в качестве значения по умолчанию, при условии, что это не ожидаемое значение для аргумента.
Необязательные параметры и перегрузка
Другим способом определения процедуры с необязательными параметрами является использование перегрузки. Если у вас есть один необязательный параметр, можно определить две перегруженные версии процедуры, один принимает параметр и один без него. Этот подход становится более сложным по мере увеличения числа необязательных параметров. Тем не менее, его преимущество заключается в том, что вы можете быть абсолютно уверены, предоставляется ли программа вызова каждый необязательный аргумент.