Übergeben von Argumenten nach Position und Name (Visual Basic)

Wenn Sie eine Sub- oder Function-Prozedur aufrufen, können Sie Argumente nach Position (in der Reihenfolge, in der sie in der Definition der Prozedur angezeigt werden) oder nach Name (ohne Berücksichtigung der Position) übergeben.

Wenn Sie ein Argument nach Name übergeben, geben Sie den deklarierten Namen des Arguments gefolgt von einem Doppelpunkt und einem Gleichheitszeichen (:=) sowie dem Argumentwert an. Sie können benannte Argumente in beliebiger Reihenfolge angeben.

Die folgende Sub-Prozedur verwendet beispielsweise drei Argumente:

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

Wenn Sie diese Prozedur aufrufen, können Sie die Argumente nach Position, nach Name oder einer Mischung aus beiden angeben.

Übergeben von Argumenten nach Position

Sie können die Display-Methode wie im folgenden Beispiel gezeigt mit ihren Argumenten aufrufen, die nach Position übergeben und durch Kommas getrennt werden:

StudentInfo.Display("Mary", 19, #9/21/1998#)

Wenn Sie ein optionales Argument in einer Liste für positionelle Argumente weglassen, müssen Sie an dessen Position ein Komma einfügen. Im folgenden Beispiel wird die Display-Methode ohne das age-Argument aufgerufen:

StudentInfo.Display("Mary",, #9/21/1998#)

Übergeben von Argumenten nach Name

Alternativ können Sie Display wie im folgenden Beispiel gezeigt mit den nach Name übergebenen und durch Kommas getrennten Argumenten aufrufen:

StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")

Das Übergeben von Argumenten nach Name auf diese Weise ist besonders hilfreich, wenn Sie eine Prozedur aufrufen, die mehrere optionale Argumente enthält. Wenn Sie Argumente nach Name angeben, müssen Sie keine aufeinander folgenden Kommas verwenden, um fehlende positionelle Argumente anzugeben. Durch das Übergeben von Argumenten nach Name können Sie auch leichter nachverfolgen, welche Argumente Sie übergeben und welche Sie weglassen.

Mischen von Argumenten nach Position und nach Name

Sie können Argumente wie im folgenden Beispiel gezeigt sowohl nach Position als auch nach Name in einem einzelnen Prozeduraufruf bereitstellen:

StudentInfo.Display("Mary", birth:=#9/21/1998#)

Im vorherigen Beispiel ist kein zusätzliches Komma erforderlich, um die Stelle des ausgelassenen age-Arguments beizubehalten, da birth nach Name übergeben wird.

Wenn Sie in einer Visual Basic-Version vor Version 15.5 Argumente durch eine Mischung aus Position und Name angeben, müssen alle positionellen Argumente zuerst verwendet werden. Nachdem Sie ein Argument nach Name angegeben haben, müssen alle verbleibenden Argumente nach Name übergeben werden. Der folgende Aufruf der Display-Methode zeigt beispielsweise den Compilerfehler BC30241: Benanntes Argument erwartet. an.

StudentInfo.Display("Mary", age:=19, #9/21/1998#)

Ab Visual Basic 15.5 können positionelle Argumente auf benannte Argumente folgen, wenn sich die abschließenden positionellen Argumente an der richtigen Position befinden. Wenn unter Visual Basic 15.5 kompiliert wird, wird der vorherige Aufruf der Display-Methode erfolgreich kompiliert, und der Compilerfehler BC30241 wird nicht mehr generiert.

Diese Möglichkeit, benannte und positionelle Argumente in beliebiger Reihenfolge zu kombinieren und abzugleichen, ist besonders nützlich, wenn Sie ein benanntes Argument verwenden möchten, um den Code besser lesbar zu machen. Der folgende Person-Klassenkonstruktor erfordert beispielsweise zwei Argumente vom Typ Person, die beide Nothing sein können.

Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)

Die Verwendung gemischter benannter und positioneller Argumente trägt dazu bei, die Absicht des Codes deutlich zu machen, wenn der Wert der Argumente father und motherNothing lautet:

Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)

Sie müssen Ihrer Visual Basic-Projektdatei (*.vbproj) das folgende Element hinzufügen, damit benannte Argumente auf positionelle Argumente folgen können.

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

Weitere Informationen finden Sie unter Festlegen der Visual Basic-Sprachversion.

Einschränkungen beim Angeben von Argumenten nach Name

Sie können Argumente nicht nach Name übergeben, um die Eingabe erforderlicher Argumente zu vermeiden. Sie können nur die optionalen Argumente weglassen.

Sie können ein Parameterarray nicht nach Name übergeben. Dies liegt daran, dass Sie beim Aufrufen der Prozedur eine unbegrenzte Anzahl von durch Kommas getrennten Argumenten für das Parameterarray angeben, und der Compiler kann einem einzelnen Namen nicht mehr als ein Argument zuordnen.

Weitere Informationen