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


Практическое руководство. Определение наличия необязательных параметров (Visual Basic)

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

Если значение параметра совпадает со значением по умолчанию, то это может быть по одной из двух причин:

  • В вызывающем коде опущен аргумент в вызове процедуры; или

  • В вызывающем коде указан аргумент со значением в точности равным значению параметра по умолчанию.

Код процедуры не сможет отличить эти две возможности. Часто это неважно, но в некоторых случаях в процедуре может требоваться различные действия для каждой возможности. Лучшим подходом будет определить маловероятное значение по умолчанию, хотя это не гарантирует, что вызывающий код не может предоставить его.

Если важно точно знать, указан ли в программе опциональный аргумент, то самым безопасным подходом является переопределение версий процедуры. См. разделы Практическое руководство. Определение различных версий процедуры (Visual Basic) и Вопросы, связанные с перегрузкой процедур (Visual Basic).

Чтобы определить, передается ли аргумент в опциональный параметр

  1. Определите маловероятное значение по умолчанию для параметра.

  2. Если необязательный параметр имеет ссылочный тип, например, String, то можно использовать Nothing в качестве значения по умолчанию, при условии, что это не является ожидаемым значением аргумента.

  3. В коде процедуры сравните параметр со значением по умолчанию и выполните соответствующие действия.

Перегрузка процедур с и без опциональных параметров

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

Чтобы определить различные версии процедуры для охвата случаев включения и опускания аргумента

  1. Определите одну версию процедуры с параметром в списке аргументов. Не следует объявлять параметр как Optional.

  2. Определите другую версию процедуры без параметров. Объявление должно быть идентичным первой версии во всех других отношениях.

  3. Поместите код для каждого вызова в соответствующую версию процедуры.

Пример

В следующей процедуре определяется опциональный параметр 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

Если вызывающий код не предоставляет значение для office в списке аргументов, то Visual Basic использует значение " QJZ " по умолчанию.

Если необязательный параметр имеет ссылочный тип, например, String, то можно использовать Nothing (Visual Basic) в качестве значения по умолчанию, при условии, что это не является ожидаемым значением аргумента.

Пример использования перегрузки для определения, передается ли опциональный параметр, содержится в разделе Практическое руководство. Перегрузка процедуры, которая принимает один необязательный параметр (Visual Basic).

См. также

Задачи

Практическое руководство. Объявление необязательных параметров процедуры (Visual Basic)

Практическое руководство. Вызов процедуры, принимающей необязательные параметры (Visual Basic)

Ссылки

Optional (Visual Basic)

ParamArray (Visual Basic)

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

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

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

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

Необязательные параметры (Visual Basic)

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

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