Gewusst wie: Überladen einer Prozedur mit optionalen Parametern
Aktualisiert: November 2007
Wenn eine Prozedur einen oder mehrere Optional (Visual Basic)-Parameter enthält, können Sie eine überladene Version definieren, die jeder der impliziten Überladungen entspricht. Weitere Informationen finden Sie im Abschnitt "Implizite Überladungen für optionale Parameter" unter Überlegungen zur Prozedurüberladung.
Ein optionaler Parameter
So überladen Sie eine Prozedur, die einen optionalen Parameter akzeptiert
Schreiben Sie eine Sub-Deklarationsanweisung oder eine Function-Deklarationsanweisung, die den optionalen Parameter in der Parameterliste enthält. Verwenden Sie das Optional-Schlüsselwort nicht in dieser überladenen Version.
Stellen Sie dem Sub-Schlüsselwort oder dem Function-Schlüsselwort das Overloads-Schlüsselwort voran.
Schreiben Sie den Prozedurcode, der ausgeführt werden soll, wenn das optionale Argument im Aufrufcode nicht angegeben wird.
Beenden Sie die Prozedur nach Bedarf mit der End Sub-Anweisung oder der End Function-Anweisung.
Schreiben Sie eine zweite Deklarationsanweisung, die sich von der ersten Deklaration nur dadurch unterscheidet, dass der optionale Parameter nicht in der Parameterliste angegeben wird.
Schreiben Sie den Prozedurcode, der ausgeführt werden soll, wenn das optionale Argument im Aufrufcode nicht angegeben wird. Beenden Sie die Prozedur nach Bedarf mit der End Sub-Anweisung oder der End Function-Anweisung.
Das folgende Beispiel veranschaulicht eine Prozedur, die mit einem optionalen Parameter definiert ist, eine äquivalente Gruppe mit zwei überladenen Prozeduren sowie Beispiele für ungültige und gültige überladene Versionen.
Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads. ' Overloads Sub q(ByVal b As Byte) ' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use. ' Overloads Sub q(ByVal c As Byte, ByVal k As Long) ' The following overload uses a different signature and is valid. Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
Mehrere optionale Parameter
Für eine Prozedur mit mehreren optionalen Parametern benötigen Sie normalerweise mehr als zwei überladene Versionen. Wenn eine Prozedur beispielsweise zwei optionale Parameter enthält und im Aufrufcode jeder dieser Parameter unabhängig voneinander angegeben oder nicht angegeben werden kann, dann sind vier überladene Versionen erforderlich, nämlich eine Version für jede mögliche Kombination angegebener Argumente.
Mit zunehmender Anzahl von optionalen Parametern wird auch das Überladen komplexer. Sofern es keine nicht akzeptablen Kombinationen angegebener Argumente gibt, sind für N optionale Parameter 2 ^ N überladene Versionen erforderlich. Je nach Art der Prozedur, kann der zusätzliche Aufwand, den die Definition sämtlicher überladener Versionen bedeutet, durch die Verständlichkeit der Logik gerechtfertigt werden.
So überladen Sie eine Prozedur, die mehrere optionale Parameter akzeptiert
Legen Sie fest, welche Kombinationen angegebener optionaler Argumente in Anbetracht der Logik der Prozedur akzeptabel sind. Eine unannehmbare Kombination könnte entstehen, wenn ein optionaler Parameter von einem anderen abhängt. Wenn ein Parameter beispielsweise den Namen des Ehegatten und ein anderer das Alter des Ehegatten enthalten soll, dann ist eine Kombination von Argumenten ungültig, die das Alter, aber nicht den Namen angibt.
Schreiben Sie für jede akzeptable Kombination angegebener Werte eine Sub-Deklarationsanweisung bzw. eine Function-Deklarationsanweisung, die die entsprechende Parameterliste definiert. Verwenden Sie das Optional-Schlüsselwort nicht.
Stellen Sie in jeder Deklaration das Overloads-Schlüsselwort dem Sub-Schlüsselwort bzw. dem Function-Schlüsselwort voran.
Geben Sie nach jeder Deklaration den Prozedurcode ein, der ausgeführt werden soll, wenn im Aufrufcode eine Argumentliste angegeben wird, die der Parameterliste der betreffenden Deklaration entspricht.
Beenden Sie jede Prozedur nach Bedarf mit der End Sub-Anweisung oder der End Function-Anweisung.
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 einer unbestimmten Anzahl von Parametern