Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Methodenzuordnung auf mehrere Schnittstellen (https://www.delphipraxis.net/85230-methodenzuordnung-auf-mehrere-schnittstellen.html)

HannosG 27. Jan 2007 19:02


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.

HannosG 28. Jan 2007 16:07

Methodenzuordnung auf mehrere Schnittstellen
 
*push*

Elvis 28. Jan 2007 16:36

Re: Methodenzuordnung auf mehrere Schnittstellen
 
Zitat:

Zitat von HannosG
*push*

Erklär' mal lieber möglichst genau was du warum machen willst. Ich scheitere gerade wirklich zu erkennen was du willst. ;)

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:
var instanz : TStringFunctions;
begin
  instanz := TStringFunctions.Create();
  Writeln(instanz.StrHallo());
Wenn eine Methode keinen Status benötigt, also nicht auf Felder/Eigenschaften der Klasse zugreift, kannst du sie auch als class method deklarieren:
Delphi-Quellcode:
TStringFunctions = class
  class function StrHallo(str : string) : string;
end;
Nun wird die MEthode direkt auch der Klasse ausgeführt:
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:

HannosG 28. Jan 2007 21:20

Re: Methodenzuordnung auf mehrere Schnittstellen
 
Zitat:

Zitat von Elvis
Erklär' mal lieber möglichst genau was du warum machen willst. Ich scheitere gerade wirklich zu erkennen was du willst. ;)

Vielen Dank fürs erkennen versuchen :)
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
  • Die Instanz habe ich denk ich doch mit "StringFunctions: TStringFunctions;" schon festgelegt.
    An sich soll die Methode eine normale Instanzmethode sein.
    Wenn ich diese aber mit "class" einleite, so benötige ich "StringFunctions:= TStringFunctions.Create();", wobei ich wiederum nicht genau weiß, wie und an welcher Stelle man das in dieser Unit unterbringt.
  • "Writeln(instanz.StrHallo())" - Was macht man damit? - Wenn das einfach nur ein Aufrufen der Funktion bedeuten soll, dann mach ich das siehe unten - Liegt wohl daran, dass ich nicht Turbo-Delphi sondern Delphi7 habe. :|

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:
Edit1.Text:=StringFunctions.StrHallo(Edit1.Text);
Jetzt, was ich eigentlich möchte:
Die Unit "MyLib" so verändern, dass ich in "Unit1" die Funktion "StrHallo" z.B. so aufrufen kann:
Delphi-Quellcode:
Edit1.Text:=MyLib.Functions.StringFunctions.StrHallo(Edit1.Text);
Wozu das alles:
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:

Zitat von Elvis
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.

Danke, habs schon ausprobiert - funktioniert echt super! :mrgreen:

LG, Hanno

omata 28. Jan 2007 22:03

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:
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;
Das ist dann natürlich auch auf mehrere Units aufteilbar.

Gruss
Thorsten

HannosG 28. Jan 2007 22:54

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.

omata 28. Jan 2007 23:11

Re: Methodenzuordnung auf mehrere Schnittstellen
 
Zitat:

Zitat von HannosG
wenn ich statt "s:=MyLib.Functions.StringFunctions.StrHallo('xx') ;" nicht "s" sondern Edit1.Text zuweise gehts leider schon nicht mehr

Das ist komisch, bei mir geht das wunderbar.

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