AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Methodenzuordnung auf mehrere Schnittstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Methodenzuordnung auf mehrere Schnittstellen

Ein Thema von HannosG · begonnen am 27. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#1

Methodenzuordnung auf mehrere Schnittstellen

  Alt 27. Jan 2007, 19:02
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.
Hanno Günther
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#2

Methodenzuordnung auf mehrere Schnittstellen

  Alt 28. Jan 2007, 16:07
*push*
Hanno Günther
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Methodenzuordnung auf mehrere Schnittstellen

  Alt 28. Jan 2007, 16:36
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: 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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Methodenzuordnung auf mehrere Schnittstellen

  Alt 28. Jan 2007, 21:20
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: 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: 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 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!

LG, Hanno
Hanno Günther
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Methodenzuordnung auf mehrere Schnittstellen

  Alt 28. Jan 2007, 22:03
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
  Mit Zitat antworten Zitat
Benutzerbild von HannosG
HannosG

Registriert seit: 2. Jul 2006
42 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Methodenzuordnung auf mehrere Schnittstellen

  Alt 28. Jan 2007, 22:54
Vielen Dank!
wenn ich statt "s:=MyLib.Functions.StringFunctions.StrHallo('xx') ;" nicht "s" sondern Edit1.Text zuweise gehts leider schon nicht mehr.

Aber vielleicht bekomme ich das auch selbst hin.
Hanno Günther
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Methodenzuordnung auf mehrere Schnittstellen

  Alt 28. Jan 2007, 23:11
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz