Поделиться через


Необязательные параметры (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 в качестве значения по умолчанию, при условии, что это не является ожидаемым значением аргумента.

Необязательные параметры и перегрузка

Другой способ определения процедуры с необязательными параметрами состоит в использовании перегрузки.Если имеется один необязательный параметр, то можно определить две перегруженные версии процедуры, одна принимает параметр, а другая — нет.Такой подход становится более сложным с увеличением числа необязательных параметров.Однако, его преимущество заключается в том, что он позволяет точно знать, все ли необязательные аргументы заданы в вызывающей программе.

См. также

Ссылки

Optional (Visual Basic)

ParamArray (Visual Basic)

Основные понятия

Процедуры в Visual Basic

Параметры и аргументы процедуры (Visual Basic)

Передача аргументов по значению и по ссылке (Visual Basic)

Передача аргументов по позиции и по имени (Visual Basic)

Массивы параметров (Visual Basic)

Перегрузка процедур (Visual Basic)