Udostępnij za pośrednictwem


Parametry opcjonalne (Visual Basic)

Można określić, że parametr procedury jest opcjonalny i nie trzeba podawać dla niego argumentu po wywołaniu procedury. Parametry opcjonalne są wskazywane przez Optional słowo kluczowe w definicji procedury. Obowiązują następujące reguły:

  • Każdy opcjonalny parametr w definicji procedury musi określać wartość domyślną.

  • Wartość domyślna opcjonalnego parametru musi być wyrażeniem stałym.

  • Każdy parametr po opcjonalnym parametrze w definicji procedury musi być również opcjonalny.

Poniższa składnia przedstawia deklarację procedury z opcjonalnym parametrem:

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

Wywoływanie procedur z opcjonalnymi parametrami

Podczas wywoływania procedury z opcjonalnym parametrem można wybrać, czy podać argument. Jeśli tego nie zrobisz, procedura używa wartości domyślnej zadeklarowanej dla tego parametru.

W przypadku pominięcia co najmniej jednego opcjonalnego argumentu na liście argumentów należy użyć kolejnych przecinków, aby oznaczyć ich pozycje. Poniższe przykładowe wywołanie dostarcza pierwsze i czwarte argumenty, ale nie drugie lub trzecie:

Sub name(argument 1, , , argument 4)  

Poniższy przykład wykonuje kilka wywołań MsgBox funkcji. MsgBox ma jeden wymagany parametr i dwa parametry opcjonalne.

Pierwsze wywołanie do MsgBox przekazuje wszystkie trzy argumenty w kolejności, którą MsgBox je definiuje. Drugie wywołanie dostarcza tylko wymagany argument. Trzecie i czwarte wywołania dostarczają pierwsze i trzecie argumenty. Trzecie wywołanie wykonuje to według pozycji, a czwarte wywołanie wykonuje je według nazwy.

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")

Określanie, czy argument opcjonalny jest obecny

Procedura nie może wykryć w czasie wykonywania, czy dany argument został pominięty, czy kod wywołujący jawnie podał wartość domyślną. Jeśli musisz dokonać tego rozróżnienia, możesz ustawić mało prawdopodobną wartość jako domyślną. Poniższa procedura definiuje opcjonalny parametr office, i testuje jego wartość domyślną, , aby sprawdzić, QJZczy został pominięty w wywołaniu:

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

Jeśli opcjonalny parametr jest typem odwołania, takim jak String, można użyć Nothing jako wartości domyślnej, pod warunkiem, że nie jest to oczekiwana wartość argumentu.

Parametry opcjonalne i przeciążenie

Innym sposobem definiowania procedury z opcjonalnymi parametrami jest użycie przeciążenia. Jeśli masz jeden opcjonalny parametr, możesz zdefiniować dwie przeciążone wersje procedury, jedną akceptującą parametr i jedną bez niego. Takie podejście staje się bardziej skomplikowane w miarę wzrostu liczby parametrów opcjonalnych. Jednak jego zaletą jest to, że można mieć absolutną pewność, czy program wywołujący dostarczył każdy opcjonalny argument.

Zobacz także