AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Class Helper for Interface

Ein Thema von himitsu · begonnen am 16. Feb 2015 · letzter Beitrag vom 18. Feb 2015
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#21

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:13
Bei der Vererbung müssen sich aber die Helper kennen, bzw. es sind dann "immer" beide Helper eingebunden, wenn man den Nachfahren haben will.


Man kann aber nicht mehrere Helper unabhängig "parallel" deklarieren.
z.B. der Helper vom Delphi, dann Meiner (OK, da könnte man vererben), aber jetzt kommen noch die Helper von sh17 und Anderen dazu, die ich mir über Fremdkomponenten reinhole.

Sollen wir uns jetzt alle einigen, wer von wem erbt?
Vererbung ist keine Lösung, denn gerade diese Abhängigkeiten wollte man doch loswerden. Da könnte man die Class-Helper auch gleich wegwerfen und direkt die Klassen-Vererbung benutzen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Feb 2015 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:15
Es würde immerhin reichen, dem RTL-eigenen TStringHelper (und Konsorten) noch etwas eigenes hinzuzufügen. Wenigstens einmal. Ich bin ein genügsamer Mensch.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:18
Preisfrage: Wo ist 'Bar' denn implementiert? Im Interface sicherlich nicht...
Delphi-Quellcode:
IFooHelper = interface helper for IFoo
  procedure Bar;
end;
ist equivalent zu:

procedure Bar(const Self: IFoo);
Aber muss das Objekt dann nicht trotzdem IFooHelper kennen?
Wie soll das sonst funktionieren?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#24

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:18
Bei der Vererbung müssen sich aber die Helper kennen, bzw. es sind dann "immer" beide Helper eingebunden, wenn man den Nachfahren haben will.


Man kann aber nicht mehrere Helper unabhängig "parallel" deklarieren.
z.B. der Helper vom Delphi, dann Meiner (OK, da könnte man vererben), aber jetzt kommen noch die Helper von sh17 und Anderen dazu, die ich mir über Fremdkomponenten reinhole.

Sollen wir uns jetzt alle einigen, wer von wem erbt?
Vererbung ist keine Lösung. Da könnte man die Class-Helper auch gleich wegwerfen und direkt die Klassen-Vererbung benutzen.
Ich hab nur gesagt, wie es ist, nicht dass es gut ist. Vererbung von helpern ist Unfug. Sie sollten es vernünftig (oh je) implementieren und mehrere erlauben und korrekt erkennen, wenn es Konflikte gibt - oder den klassischen Weg von "wenn es 2 gleiche gibt, dann überdeckt der letzte den vorherigen" - wobei ich dieses Verhalten von Delphi schon seit jeher als sehr gefährlich betrachte.

Aber muss das Objekt dann nicht trotzdem IFooHelper kennen?
Wie soll das sonst funktionieren?
Was hat das Objekt damit zu tun? Ich operiere auf dem Interface, wo is da nen Objekt?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (17. Feb 2015 um 10:33 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:20
Man kann aber nicht mehrere Helper unabhängig "parallel" deklarieren.
z.B. der Helper vom Delphi, dann Meiner (OK, da könnte man vererben), aber jetzt kommen noch die Helper von sh17 und Anderen dazu, die ich mir über Fremdkomponenten reinhole.
Und bei gleichen Methoden (Bezeichner und Rückgabewert) in den Helpern?
Wie soll das Problem gelöst werden, welche Methode genommen werden soll? Mit As-Operator?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:22
Aber muss das Objekt dann nicht trotzdem IFooHelper kennen?
Wie soll das sonst funktionieren?
Was hat das Objekt damit zu tun? Ich operiere auf dem Interface, wo is da nen Objekt?
Muss nicht irgendwer irgendwann mal irgendwas implementieren?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#27

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:23
Und bei gleichen Methoden (Bezeichner und Rückgabewert) in den Helpern?
Siehe Stevies Antwort, kurz vor dir.


Auch Interfaces kann man vererben, aber dann muß ich die Methoden nicht nur ins Interface einbauen, sondern auch in das dahinterliegende Objekt und genau das kann/will ich nicht, vorallem nicht, wenn man das Dahinter garnicht kennt und keinen Zugriff darauf hat.

Mir würde es auch reichen, wenn man statische Methoden direkt im Interface deklarieren könnte, aber weil das nicht geht, dachte ich, ich probiere es einfach mal mit einem Helper, der dann auch garnicht ging.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#28

AW: Class Helper for Interface

  Alt 17. Feb 2015, 10:29
Muss nicht irgendwer irgendwann mal irgendwas implementieren?
Der Code steckt im Helper, so wie jetzt auch, bei all den anderen Helpern.

Das Objekt/Interface muß und soll garnichts davon wissen, genauso wie der Vorfahr von einer Vererbung auch nichts wissen soll.
Der Compiler leitet den Aufuf auf die Helper-Methode um, wenn er sie findet und geht nicht direkt auf das Objekt/Interface los.

[add]
Das ist es, was Delphi bei den Class-Helpern macht ... so im Prinzip.

Delphi-Quellcode:
type
  TMyClass = class
    procedure Foo(S: string);
  end;
  TMyDummyClassHelper = class(TMyClass)
    procedure Bar(S: string);
  end;

procedure TMyClass.Foo(S: string);
begin
  ShowMessage(S);
end;

procedure TMyDummyClassHelper.Bar(S: string);
begin
  S := StringReplace(S, ' ', ' du schöne ', []);
  Foo(S);
end;

var
  C: TMyClass;
begin
  C := TMyClass.Create;
  C.Foo('Hallo Welt!');
  //C.Bar('Hallo Welt!'); << Compiler findet Bar im Helper und baut quasi einen Cast ein.
  TMyDummyClassHelper(C).Bar('Hallo Welt!');
end;
Das haben die einfach so von mir abgeguckt, denn sowas hatte ich früher schon gemacht, als es noch keine Helper gab.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Feb 2015 um 11:02 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#29

AW: Class Helper for Interface

  Alt 17. Feb 2015, 12:34
Die Funktion ist eben nicht im Interface, genauso wenig, wie bei den anderen Record/Class-Helpern oder so wie eine class procedure nicht im Objekt steckt, zu Welchem sie deklariert wurde.


  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#30

AW: Class Helper for Interface

  Alt 18. Feb 2015, 08:41
So einfach kann es manchmal sein, wenn man kein Brett vorm Kopf hat!

Spricht denn irgendwas rein technisch gegen Interface-Helper?
COM-Kompatibilität oder so?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 02:16 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