![]() |
Optionale Parameter
Hi,
ich erinnere mich, dass ich in VBasic damals Parameter als optional übergeben konnte (sprich, es ist nciht notwendig diese Parameter zu setzen) ich habe nichts vergleichbares in Delphi gefunden, irre ich mich da? danke! |
Hallo DerKapitalist, ich hab jetzt nicht gesucht danach, aber geht das nicht in dem man den betreffenden Parameter schon in der Deklaration initialisiert? Ich meine so:
Delphi-Quellcode:
Bin mir wie gesagt nicht sicher.
function MyFunction(a: integer; b: integer=0):TSomeType;
Gruß, Sebastian |
Ja so gehts. Gibt aber noch ein paar (notwendige!) Regeln dazu, such mal in der OH nach "Default parameters".
Gruß, Sebastian |
danke!
|
Hallo!
Es gibt noch eine weitere Möglichkeit: OVERLOAD! Damit kannst Du mehrere Prozeduren/Funktionen mit demselben Namen, aber unterschiedlichen Parameterlisten schreiben. Der Compiler erzeugt dann Code, der die von den Parametern her "richtige" Routine aufruft. Die können sich sogar gegenseitig aufrufen. Beispiel:
Code:
Man muß nur für jede mögliche Parameter-Kombination eine Funktion schreiben. Hier wäre ja die Initialisierung in Ordnumg, aber bei einem optionalen VAR-Parameter (var I:integer) hilft nur Overload!
function Test(S: string; I:integer): integer; overload;
begin // der gewünschte Code end; function Test(S: string): integer; overload; begin Result:= Test (S, 0); end; Gruß Dietmar Brüggendiek |
danke! ich habe aber überladene Methoden bewusst nicht verwendet, es ging mir einfach nur um optionale Parameter... leider funktioniert das mit dynamische Arrays nicht.
Im Prinzip fuehrt meine Funktion das selbe aus, deshalb kein overload, ich dachte mir nur, es ist etwas stylischer das so zu programmieren :-) |
Moin Zusammen,
da gibt's doch aber einen gravierenden Unterschied: overload wendet man an, wenn Funktionen gleichen Namens mit unterschiedlichen Parametertypen und Anzahlen aufrufen können soll, und default parameter, wenn einer oder mehrere der Parameter einen Standardwert bekommen können, so dass man nicht alle mitschreiben muss. |
Re: Optionale Parameter
Ich hätte da auch eine Frage zu den Standartwerten...
Wenn ich nun mehrere Default Parameter Deklariert habe und möchte bei dem proceduraufruft die ersten beiden auf standart lassen, und den letzten ändern. Beispiel:
Delphi-Quellcode:
Wenn ich nun nur den Parameter3 einen Neuen wert verpassen will, wie stelle ich es an ?
Procedure TForm1.Machwas(param0:String;param1:integer=1;param2:integer=2;param3:integer=3);
begin // Mach irgendwas; end;
Delphi-Quellcode:
Machwas('test',?,?,9); // ?????
|
Re: Optionale Parameter
Dann wirst Du AFAIK alle Parameter übergeben müssen.
|
Re: Optionale Parameter
Das geht so nicht. Du müsstest dann auch einen Wert für die anderen Parameter festlegen oder einen wert, den du dann im Programm durch den Standradwert ersetzt.
|
Re: Optionale Parameter
[OT] :firejump: Einmal schneller als mkinzler :bouncing4:
:zwinker: :cheers: [/OT] |
Re: Optionale Parameter
Zitat:
beispielsweise... 'n dynamisches array übergeben, 'n objektliste übergeben..., default parameter, variante records, etc. pp. <HTH> |
Re: Optionale Parameter
@grenzgaenger:
Der Kapitalist war vor 4 Jahren das letzte Mal hier :zwinker: |
Re: Optionale Parameter
@grenzgaenger
und sie gibt es doch, oder habe ich was falsch verstanden? Ich meine Default Paramter... ich kann jetzt nicht sagen wie das in VBA geht, aber in Object Pascal nutzt ich sie sehr gerne.... das geht sogar mit Klassen wie z.b. eine TStringlist.... ob auch ein array geht habe ich noch nicht wirklich ausprobiert. |
Re: Optionale Parameter
Es gibt auch die Möglichkeit über Dispatch-Interfaces zu arbeiten.
Damit sind dann solche Konstruktionen möglich:
Delphi-Quellcode:
Die Open-Methode könnte noch 10 weitere Parameter haben; man braucht sie nicht anzugeben.
var
object : OleVariant; begin object := ...; // Filename, Mode und Backup sind Parameternamen, keine Variablen! object.Open(Filename:='C:\test.txt', Mode:=omReadWrite, Backup:=False); Diese Art des Aufruf ist allerdings recht langsam, da im Hintergrund einiges abgeht. Das ist aber auch der Weg, den VB einschlägt. (ein Hauptgrund, weshalb VB nicht so schnell ist) Alle Parameter sind Variants, die aufgerufene Methode erkennt dass ein Parameter nicht befüllt wurde daran, dass der Parameter = EmptyParam ist. |
Re: Optionale Parameter
Hallo,
sorry das ich den alten Thread wieder ausgrabe aber mein Problem bezieht sich auf das oben genannte Overload, sprich überladen von Methoden. Ich habe es so versucht:
Delphi-Quellcode:
Ich bekomme aber jetzt die Meldung: E1030 Ungültige Compileranweisung: 'OVERLOAD'
procedure TOutlookPro.SendEmail(body : String; slAttPaths : TStringlist); overload;
var outlookApp : TOutlookApplication; mailItem : Variant; i : Integer; begin outlookApp := TOutlookApplication.Create(Self); mailItem := OutlookApp.CreateItem(olMailItem); mailItem.Recipients.Add('alexander.bosshammer@bestserv.de'); mailItem.Subject := 'Supportanfrage bsMIO'; mailItem.Body := body; for i := 0 to slAttPaths.Count do begin mailItem.Attachments.Add(slAttPaths[i]); end; mailItem.Send; end; procedure TOutlookPro.SendEmail(body : String); overload; var outlookApp : TOutlookApplication; mailItem : Variant; begin outlookApp := TOutlookApplication.Create(Self); mailItem := OutlookApp.CreateItem(olMailItem); mailItem.Recipients.Add('alexander.bosshammer@bestserv.de'); mailItem.Subject := 'Supportanfrage bsMIO'; mailItem.Body := body; mailItem.Send; end; Woran liegt das und wie bekomme ich die Meldung weg? :gruebel: VG Alex |
Re: Optionale Parameter
Das "overload" gehört in die Klassen-Deklaration.
Delphi-Quellcode:
type
TMyClass = class(TSomething) public procedure SomeProc(i: integer); overload; //hier overload hinschreiben procedure SomeProc(s: string); overload; procedure SomeProc(i: integer; s: string); overload; end; ... procedure TMyClass.SomeProc(i: integer); //hier nicht begin // end; |
Re: Optionale Parameter
Wie sieht die Methodendeklaration im Interface aus?
Ist die Methode überladbar? |
Re: Optionale Parameter
Noch eine Anmerkung zu den Standardparameter, sie müssen immer als letztes in der Deklaration angegeben werden.
|
Re: Optionale Parameter
Danke :) DeddyHs Antwort hat geholfen :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz