![]() |
Methodenzuordnung auf mehrere Schnittstellen
Moin!
Rufe ich bei Einbindung folgender Unit die Funktion "StrHallo" auf, so rufe ich diese mit "StringFunctions.StrHallo" auf. Jetzt meine Frage: Wie legt man eine oder mehrere Methode(n) über mehrere Schnittstellen (wenn Schnittstelle das richtige Wort ist) hinweg an, sodass man diese z.B. mit "MyLib.StringFunctions.StrHallo" aufrufen kann?
Delphi-Quellcode:
unit MyLib;
interface type TStringFunctions = class function StrHallo(str:string):string; end; var StringFunctions: TStringFunctions; implementation function TStringFunctions.StrHallo(str:string):string; begin Result:=str+'Hallo'; end; end. |
Methodenzuordnung auf mehrere Schnittstellen
*push*
|
Re: Methodenzuordnung auf mehrere Schnittstellen
Zitat:
Zu deinem Code: Du hast dort eine normale Instanzmethode deklariert. die braucht natürlich eine Instanz auf der sie ausgeführt werden kann:
Delphi-Quellcode:
Wenn eine Methode keinen Status benötigt, also nicht auf Felder/Eigenschaften der Klasse zugreift, kannst du sie auch als class method deklarieren:
var instanz : TStringFunctions;
begin instanz := TStringFunctions.Create(); Writeln(instanz.StrHallo());
Delphi-Quellcode:
Nun wird die MEthode direkt auch der Klasse ausgeführt:
TStringFunctions = class
class function StrHallo(str : string) : string; end;
Delphi-Quellcode:
Writeln(TStringFunctions.StrHallo());
btw: Es gibt auch noch eine Leertaste. (das lange Ding, unten/mitte deiner Tastatur) Mit deren Hilfe tut es auch nicht so weh auf den Code zu schauen. :zwinker: |
Re: Methodenzuordnung auf mehrere Schnittstellen
Zitat:
Sorry bin noch ziemlicher Anfänger :? - ich versuche mich mal deutlicher auszudrücken: Mein Quellcode von #1 ist nicht wirklich das Problem, der funktioniert ohne Probleme @Elvis
Jetzt, was ich schon habe: Ich habe eine Unit namens "MyLib". In dieser Unit in einer Klasse (Instanz) ist eine Funktion (Methode) namens "StrHallo". ...siehe (#1) Ich habe eine zweite Unit namens "Unit1". In dieser Unit habe ich "MyLib" in die "uses" eingebunden. Rufe ich ich in Unit1 "StrHallo" auf, so mache ich dies z.B. folgendermaßen:
Delphi-Quellcode:
Jetzt, was ich eigentlich möchte:
Edit1.Text:=StringFunctions.StrHallo(Edit1.Text);
Die Unit "MyLib" so verändern, dass ich in "Unit1" die Funktion "StrHallo" z.B. so aufrufen kann:
Delphi-Quellcode:
Wozu das alles:
Edit1.Text:=MyLib.Functions.StringFunctions.StrHallo(Edit1.Text);
Ich möchte lediglich eine geordnete Library-Unit schaffen, wo die einzelnen Methoden mit Über- und Unterbegriffen logisch aufrufbar ist. z.B. MyLib.Functions.StringFunctions.StrHallo MyLib.Functions.StringFunctions.Correct MyLib.Functions.MathFunctions.Fakultaet MyLib.Functions.SetFunction MyLib.MirFaelltNixMehrEin Zitat:
LG, Hanno |
Re: Methodenzuordnung auf mehrere Schnittstellen
Ich würde mir dafür eine ordentliche Klassenbibliothek bauen.
Die nicht so schöne Variante (das ist das was du vorhast) könnte vielleicht so aussehen...
Delphi-Quellcode:
Das ist dann natürlich auch auf mehrere Units aufteilbar.
type
TLibStringFunctions = class class function StrHallo(text:string):string; end; TLibMathFunctions = class class function Fakultaet(x:integer):integer; end; TMyLibFunctions = class StringFunctions:TLibStringFunctions; MathFunctions:TLibMathFunctions; end; TMyLib = class Functions:TMyLibFunctions; end; : : { TLibStringFunctions } class function TLibStringFunctions.StrHallo(text:string): string; begin Result:=text; end; { TLibMathFunctions } class function TLibMathFunctions.Fakultaet(x: integer): integer; begin Result:=x; end; procedure TForm.ButtonClick(Sender: TObject); var MyLib:TMyLib; s:string; f:integer; begin s:=MyLib.Functions.StringFunctions.StrHallo('xx'); f:=MyLib.Functions.MathFunctions.Fakultaet(1)); end; Gruss Thorsten |
Re: Methodenzuordnung auf mehrere Schnittstellen
Vielen Dank! :thumb:
wenn ich statt "s:=MyLib.Functions.StringFunctions.StrHallo('xx') ;" nicht "s" sondern Edit1.Text zuweise gehts leider schon nicht mehr. :wall: Aber vielleicht bekomme ich das auch selbst hin. |
Re: Methodenzuordnung auf mehrere Schnittstellen
Zitat:
Gruss Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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 by Thomas Breitkreuz