Freigeben über


Vorgehensweise: Überladen einer Prozedur mit optionalen Parametern (Visual Basic)

Wenn eine Prozedur einen oder mehrere optionale Parameter enthält, können Sie keine überladene Version definieren, die mit einer der impliziten Überladungen übereinstimmen. Weitere Informationen finden Sie unter "Implizite Überladungen für optionale Parameter" unter Überlegungen zu Überladevorgängen.

Ein optionaler Parameter

So überladen Sie eine Prozedur, die einen optionalen Parameter verwendet

  1. Schreiben Sie eine Sub oder Function Deklarationsanweisung, die den optionalen Parameter in der Parameterliste enthält. Verwenden Sie das Optional Schlüsselwort in dieser überladenen Version nicht.

  2. Stellen Sie das Schlüsselwort Sub dem Function- oder -Schlüsselwort voran.

  3. Schreiben Sie den Prozedurcode, der ausgeführt werden soll, wenn der aufrufende Code das optionale Argument bereitstellt.

  4. Beenden Sie die Prozedur entsprechend mit der End Sub- oder End Function-Anweisung.

  5. Schreiben Sie eine zweite Deklarationsanweisung, die mit der ersten Deklaration identisch ist, mit der Ausnahme, dass sie den optionalen Parameter nicht in die Parameterliste einschließt.

  6. Schreiben Sie den Prozedurcode, der ausgeführt werden soll, wenn der aufrufende Code das optionale Argument nicht angibt. Beenden Sie die Prozedur entsprechend mit der End Sub- oder End Function-Anweisung.

    Das folgende Beispiel zeigt eine Prozedur, die mit einem optionalen Parameter definiert ist, einen entsprechenden Satz von zwei überladenen Prozeduren und schließlich 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 mehr als einem optionalen Parameter benötigen Sie normalerweise mehr als zwei überladene Versionen. Wenn beispielsweise zwei optionale Parameter vorhanden sind und der aufrufende Code jeden unabhängig vom anderen angeben oder weglassen kann, benötigen Sie vier überladene Versionen, eine für jede mögliche Kombination von bereitgestellten Argumenten.

Da sich die Anzahl optionaler Parameter erhöht, steigt die Komplexität der Überladung. Wenn nicht einige Kombinationen der angegebenen Argumente nicht akzeptabel sind, benötigen Sie für N optionale Parameter 2 ^ N überladene Versionen. Je nach Art des Verfahrens können Sie feststellen, dass die Klarheit der Logik den zusätzlichen Aufwand für die Definition aller überladenen Versionen rechtfertigt.

So überladen Sie eine Prozedur mit mehr als einem optionalen Parameter

  1. Bestimmen Sie, welche Kombinationen von bereitgestellten optionalen Argumenten für die Logik der Prozedur akzeptabel sind. Eine inakzeptable Kombination kann auftreten, wenn ein optionaler Parameter von einem anderen abhängt. Wenn beispielsweise ein Parameter den Namen einer Person akzeptiert und ein anderer das Alter der Person akzeptiert, ist eine Kombination von Argumenten, die das Alter angeben, aber das Auslassen des Namens ist inakzeptabel.

  2. Schreiben Sie für jede akzeptable Kombination von bereitgestellten optionalen Argumenten eine Sub- oder Function-Deklarationsanweisung, die die entsprechende Parameterliste definiert. Verwenden Sie das Optional Schlüsselwort nicht.

  3. In jeder Deklaration ist dem Schlüsselwort Sub oder Function das Schlüsselwort Overloads voranzustellen.

  4. Schreiben Sie nach jeder Deklaration den Prozedurcode, der ausgeführt werden soll, wenn der aufrufende Code eine Argumentliste bereitstellt, die der Parameterliste dieser Deklaration entspricht.

  5. Beenden Sie jede Prozedur entsprechend entweder mit der End Sub- oder der End Function-Anweisung.

Siehe auch