Funktionen und Verfahren sind ein wichtiger Bestandteil der Delphi-Sprache. Ab Delphi 4 können wir mit Delphi mit Funktionen und Prozeduren arbeiten, die Standardparameter unterstützen (Making the Parameter optional) und ermöglicht, dass zwei oder mehr Routinen einen identischen Namen haben, aber als völlig unterschiedlich arbeiten Routinen.
Mal sehen, wie Überladen und Standardparameter Ihnen helfen können, besser zu codieren.
Überlastung
Einfach ausgedrückt bedeutet Überladen mehr als eine Routine mit demselben Namen. Durch Überladen können mehrere Routinen verwendet werden, die denselben Namen haben, jedoch eine unterschiedliche Anzahl von Parametern und Typen aufweisen.
Betrachten wir als Beispiel die folgenden zwei Funktionen:
{Überladene Routinen müssen deklariert werden. mit der Überladungsanweisung}Funktion SumAsStr (a, b: Ganzzahl): Zeichenfolge; Überlast; Start Ergebnis: = IntToStr (a + b); Ende; Funktion SumAsStr (a, b: erweitert; Ziffern: Ganzzahl): Zeichenfolge; Überlast; Start Ergebnis: = FloatToStrF (a + b, ffFixed, 18, Digits); Ende;
Diese Deklarationen erstellen zwei Funktionen, beide SumAsStr genannt, die eine unterschiedliche Anzahl von Parametern annehmen und von zwei verschiedenen Typen sind. Wenn wir eine überladene Routine aufrufen, muss der Compiler erkennen können, welche Routine wir aufrufen möchten.
Beispielsweise ruft SumAsStr (6, 3) die erste SumAsStr-Funktion auf, da ihre Argumente ganzzahlig sind.
Hinweis: Delphi hilft Ihnen bei der Auswahl der richtigen Implementierung mithilfe von Code-Vervollständigung und Code-Einblick.
Überlegen Sie sich andererseits, ob wir versuchen, die SumAsStr-Funktion wie folgt aufzurufen:
SomeString: = SumAsStr (6.0,3.0)
Wir erhalten eine Fehlermeldung: "Es gibt keine überladene Version von 'SumAsStr', die mit diesen Argumenten aufgerufen werden kann."Dies bedeutet, dass wir auch den Parameter Digits einschließen sollten, mit dem die Anzahl der Stellen nach dem Dezimalpunkt angegeben wird.
Hinweis: Beim Schreiben überladener Routinen gibt es nur eine Regel: Eine überladene Routine muss sich in mindestens einem Parametertyp unterscheiden. Der Rückgabetyp kann stattdessen nicht zur Unterscheidung zwischen zwei Routinen verwendet werden.
Zwei Einheiten - eine Routine
Angenommen, wir haben eine Routine in Einheit A, und Einheit B verwendet Einheit A, deklariert jedoch eine Routine mit demselben Namen. Die Deklaration in Einheit B benötigt keine Überladungsanweisung. Wir sollten den Namen von Einheit A verwenden, um Aufrufe der Routineversion von Einheit B von Einheit B zu qualifizieren.
Betrachten Sie so etwas:
Einheit B;... Verwendet EIN;... Verfahren RoutineName; Start Ergebnis: = A.RoutineName; Ende;
Eine Alternative zur Verwendung überladener Routinen ist die Verwendung von Standardparametern, was normalerweise dazu führt, dass weniger Code geschrieben und verwaltet werden muss.
Standard- / optionale Parameter
Um einige Anweisungen zu vereinfachen, können wir einen Standardwert für den Parameter einer Funktion oder Prozedur angeben und die Routine mit oder ohne Parameter aufrufen, wodurch sie optional wird. Um einen Standardwert bereitzustellen, beenden Sie die Parameterdeklaration mit dem Gleichheitszeichen (=), gefolgt von einem konstanten Ausdruck.
Zum Beispiel angesichts der Erklärung
Funktion SumAsStr (a, b: erweitert; Ziffern: Ganzzahl = 2): Zeichenfolge;
Die folgenden Funktionsaufrufe sind äquivalent.
SumAsStr (6.0, 3.0)
SumAsStr (6,0, 3,0, 2)
Hinweis: Parameter mit Standardwerten müssen am Ende der Parameterliste stehen und als Wert oder als const übergeben werden. Ein Referenzparameter (var) kann keinen Standardwert haben.
Wenn Sie Routinen mit mehr als einem Standardparameter aufrufen, können wir keine Parameter überspringen (wie in VB):
Funktion SkipDefParams (var Ein Faden; B: Ganzzahl = 5, C: Boolescher Wert = Falsch): Boolescher Wert;... // Dieser Aufruf generiert eine Fehlermeldung
CantBe: = SkipDefParams ('delphi',, True);
Überladen mit Standardparametern
Führen Sie keine mehrdeutigen Routinedeklarationen ein, wenn Sie sowohl Funktions- oder Prozedurüberladung als auch Standardparameter verwenden.
Beachten Sie die folgenden Erklärungen:
Verfahren DoIt (A: erweitert; B: ganze Zahl = 0); Überlast; Verfahren DoIt (A: erweitert); Überlast;
Der Aufruf der DoIt-Prozedur wie DoIt (5.0) wird nicht kompiliert. Aufgrund des Standardparameters in der ersten Prozedur ruft diese Anweisung möglicherweise beide Prozeduren auf, da nicht angegeben werden kann, welche Prozedur aufgerufen werden soll.