Przekazywanie argumentów według pozycji i według nazwy (Visual Basic)
Podczas wywoływania Sub
procedury lub Function
można przekazać argumenty według pozycji — w kolejności, w której są wyświetlane w definicji procedury — lub można przekazać je według nazwy, bez względu na pozycję.
Po przekazaniu argumentu według nazwy należy określić zadeklarowaną nazwę argumentu, po której następuje dwukropek i znak równości (:=
), a następnie wartość argumentu. Można podać nazwane argumenty w dowolnej kolejności.
Na przykład poniższa Sub
procedura przyjmuje trzy argumenty:
Public Class StudentInfo
Shared Sub Display(name As String,
Optional age As Short = 0,
Optional birth As Date = #1/1/2000#)
Console.WriteLine($"Name = {name}; age = {age}; birth date = {birth:d}")
End Sub
End Class
Wywołając tę procedurę, można podać argumenty według pozycji, nazwy lub kombinacji obu tych metod.
Przekazywanie argumentów według pozycji
Metodę Display
można wywołać przy użyciu argumentów przekazywanych według pozycji i rozdzielonych przecinkami, jak pokazano w poniższym przykładzie:
StudentInfo.Display("Mary", 19, #9/21/1998#)
Jeśli pominięto opcjonalny argument na liście argumentów pozycyjnych, musisz przechowywać jego miejsce z przecinkiem. Poniższy przykład wywołuje metodę Display
bez argumentu age
:
StudentInfo.Display("Mary",, #9/21/1998#)
Przekazywanie argumentów według nazwy
Alternatywnie można wywołać Display
argumenty przekazane przez nazwę, również rozdzielane przecinkami, jak pokazano w poniższym przykładzie:
StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")
Przekazywanie argumentów według nazwy w ten sposób jest szczególnie przydatne podczas wywoływania procedury, która ma więcej niż jeden opcjonalny argument. Jeśli podasz argumenty według nazwy, nie musisz używać kolejnych przecinków do oznaczania brakujących argumentów pozycyjnych. Przekazywanie argumentów według nazwy ułatwia również śledzenie przekazywanych argumentów i pomijanych argumentów.
Mieszanie argumentów według pozycji i według nazwy
Argumenty można podać zarówno według pozycji, jak i według nazwy w jednym wywołaniu procedury, jak pokazano w poniższym przykładzie:
StudentInfo.Display("Mary", birth:=#9/21/1998#)
W poprzednim przykładzie nie trzeba przechowywać dodatkowego przecinka w celu przechowywania miejsca pominiętego age
argumentu, ponieważ birth
jest przekazywany według nazwy.
W wersjach języka Visual Basic przed 15.5, gdy argumenty są dostarczane przez kombinację pozycji i nazwy, argumenty pozycyjne muszą pojawić się jako pierwsze. Po podaniu argumentu według nazwy wszystkie pozostałe argumenty muszą być przekazywane według nazwy. Na przykład następujące wywołanie Display
metody wyświetla błąd kompilatora BC30241: Nazwany argument oczekiwany.
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
Począwszy od języka Visual Basic 15.5, argumenty pozycyjne mogą podążać za nazwanymi argumentami, jeśli końcowe argumenty pozycyjne znajdują się w prawidłowej pozycji. Jeśli skompilowana w języku Visual Basic 15.5 poprzednie wywołanie Display
metody zostanie pomyślnie skompilowane i nie generuje już BC30241 błędu kompilatora.
Ta możliwość łączenia i dopasowywania argumentów nazwanych i pozycyjnych w dowolnej kolejności jest szczególnie przydatna, gdy chcesz użyć nazwanego argumentu, aby kod był bardziej czytelny. Na przykład następujący Person
konstruktor klasy wymaga dwóch argumentów typu Person
, z których oba mogą mieć Nothing
wartość .
Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)
Użycie mieszanych argumentów nazwanych i pozycyjnych pomaga wyczyścić intencję kodu, gdy wartość father
argumentów i mother
to Nothing
:
Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)
Aby postępować zgodnie z argumentami pozycyjnymi z nazwanymi argumentami, należy dodać następujący element do pliku projektu Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Aby uzyskać więcej informacji, zobacz ustawianie wersji języka Visual Basic.
Ograniczenia dotyczące podawania argumentów według nazwy
Nie można przekazać argumentów według nazwy, aby uniknąć wprowadzania wymaganych argumentów. Można pominąć tylko opcjonalne argumenty.
Nie można przekazać tablicy parametrów według nazwy. Dzieje się tak dlatego, że podczas wywoływania procedury należy podać nieokreśloną liczbę argumentów rozdzielanych przecinkami dla tablicy parametrów, a kompilator nie może skojarzyć więcej niż jednego argumentu z jedną nazwą.