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


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

Обновлен: Ноябрь 2007

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

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

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

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

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

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

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

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

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

См. также

Задачи

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

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

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

Параметры и аргументы процедуры

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

Передача аргумента по позиции и по имени

Необязательные параметры

Массивы параметров

Перегрузка процедур

Ссылки

Optional (Visual Basic)

ParamArray