Freigeben über


Gewusst wie: Überladen einer Prozedur mit einer unbestimmten Anzahl von Parametern

Aktualisiert: November 2007

Wenn eine Prozedur über einen ParamArray-Parameter verfügt, können Sie keine überladene Version definieren, die ein eindimensionales Array für das Parameterarray akzeptiert. Weitere Informationen finden Sie im Abschnitt "Implizite Überladungen für ParamArray-Parameter" unter Überlegungen zur Prozedurüberladung.

So überladen Sie eine Prozedur, die eine variable Anzahl von Parametern akzeptiert

  1. Stellen Sie fest, ob die Prozedur- und Aufrufcodelogik von überladenen Versionen mehr profitiert als von einem ParamArray-Parameter. Siehe "Überladungen und ParamArrays" unter Überlegungen zur Prozedurüberladung.

  2. Bestimmen Sie, welche Anzahl von angegebenen Werten die Prozedur im variablen Teil der Parameterliste akzeptieren sollte. Hierbei sind der Fall keiner Wertangabe und der Fall eines einzelnen eindimensionalen Arrays zu berücksichtigen.

  3. Schreiben Sie für jede akzeptable Anzahl angegebener Werte eine Sub-Deklarationsanweisung oder Function-Deklarationsanweisung, die die entsprechende Parameterliste definiert. Verwenden Sie weder das Optional-Schlüsselwort noch das ParamArray-Schlüsselwort in dieser überladenen Version.

  4. Stellen Sie in jeder Deklaration das Overloads-Schlüsselwort dem Sub-Schlüsselwort bzw. dem Function-Schlüsselwort voran.

  5. Geben Sie nach jeder Deklaration den Prozedurcode ein, der ausgeführt werden soll, wenn im Aufrufcode Werte angegeben werden, die der Parameterliste der betreffenden Deklaration entsprechen.

  6. Beenden Sie jede Prozedur nach Bedarf mit der End Sub-Anweisung oder der End Function-Anweisung.

Beispiel

Im folgenden Beispiel wird eine mit einem ParamArray-Parameter definierte Prozedur gezeigt und danach ein entsprechender Satz überladener Prozeduren.

Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

Sie können eine solche Prozedur nicht mit einer Parameterliste überladen, die ein eindimensionales Array für das Parameterarray akzeptiert. Sie können jedoch die Signaturen der anderen impliziten Überladungen verwenden. Die folgenden Deklarationen verdeutlichen dies.

' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

Im Code der überladenen Versionen muss nicht überprüft werden, ob der Aufrufcode einen oder mehrere Werte für den ParamArray-Parameter angegeben hat, und wenn dies der Fall war, wie viele Werte bereitgestellt wurden. Visual Basic übergibt die Steuerung der Version, zu der die angegebene Argumentliste passt.

Kompilieren des Codes

Weil eine Prozedur mit einem ParamArray-Parameter einer Gruppe von überladenen Versionen entspricht, kann eine solche Prozedur nicht mit einer Parameterliste überladen werden, die einer dieser impliziten Überladungen entspricht. Weitere Informationen hierzu finden Sie unter Überlegungen zur Prozedurüberladung.

Sicherheit

Wenn Sie mit einem Array arbeiten, das unendlich groß sein kann, besteht die Gefahr, dass eine interne Kapazität der Anwendung überschritten wird. Wenn Sie ein Parameterarray akzeptieren, müssen Sie die Länge des Arrays überprüfen, das vom Aufrufcode übergeben wird, und die entsprechenden Maßnahmen ergreifen, wenn es für die Anwendung zu groß ist.

Siehe auch

Aufgaben

Verfahren zur Problembehandlung

Gewusst wie: Definieren mehrerer Versionen einer Prozedur

Gewusst wie: Aufrufen einer überladenen Prozedur

Gewusst wie: Überladen einer Prozedur mit optionalen Parametern

Konzepte

Prozeduren in Visual Basic

Parameter und Argumente von Prozeduren

Optionale Parameter

Parameterarrays

Prozedurüberladung

Überladungsauflösung