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ć Nothingwartość .

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ą.

Zobacz też