![]() |
AW: Class Helper for Interface
Einen Implicit-Cast mit einem Record hatte ich zwar schon überlegt, aber die Lösung fand ich nicht gut, denn erstmal ist das für statische Methoden, auf den Interface-Typ nicht möglich
und dann kann man die Codevervollständigung auch gleich komplett vergessen. |
AW: Class Helper for Interface
Wenn also Foo IFoo implementiert und ich dann IFoo nachträglich über einen Helper erweitere, z.B. mit der Methode Bar()... Was ist dann mit Foo? Implementiert Foo dann noch IFoo?
In meiner DLL:
Delphi-Quellcode:
Foo implementiert also IFoo. Gut.
type
IFoo = Interface procedure FooMethod; end; Foo = Class (IFoo) public procedure FooMethod; end Nun erweitere ich IFoo mit einem Helper
Delphi-Quellcode:
Preisfrage: Wo ist 'Bar' denn implementiert? Im Interface sicherlich nicht...
IFooHelper = interface helper for IFoo
procedure Bar; end; ... var Foo : IFoo; ... Foo.Bar; // das geht also. Var oldFoo : Foo; begin Foo.Bar // und das? |
AW: Class Helper for Interface
Zitat:
Delphi-Quellcode:
ist equivalent zu:
IFooHelper = interface helper for IFoo
procedure Bar; end;
Delphi-Quellcode:
Damit kannste dir die Frage selbst beantworten.
procedure Bar(const Self: IFoo);
|
AW: Class Helper for Interface
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.
Helper sollen nicht das Objekt/Interface selbst verändern, sondern nur darauf aufbauend eine Funktionen hinzufügen. (drum darf/kann man dort auch keine Felder deklarieren oder dynamic/virtual/abstract verwenden, weil das eine Veränderung erfordern würde) |
AW: Class Helper for Interface
Wo wir gerade dabei sind, weiß jemand, ob es irgendwann Unterstützung für mehrere Helper für einen Typ geben wird? Würde mir gern meinen eigenen String-Helper basteln, der haut mir ja momentan aber den vom Delphi raus. Ich hätte aber gern beide, OHNE jetzt eine Kopie der Delphi-Variante pflegen zu müssen.
|
AW: Class Helper for Interface
Bestimmt. Die ersten
![]() |
AW: Class Helper for Interface
Delphi ist ja bald richtig erwachsen ... mit 35 sind dann wohl auch die letzten Jugendsünden behoben. :angel:
|
AW: Class Helper for Interface
Ich will gar nicht wissen wie dann die Midlife Crisis aussieht.
|
AW: Class Helper for Interface
Das mit den mehrfachen Helpern ist wohl angemacht, oder kann mir ansonsten jemand das hier erklären
Delphi-Quellcode:
Oder was ist da mit dieser Vorfahrenliste gemeint? Die
type
Bezeichnername = class|record helper [(Vorfahrenliste)] for TypBezeichnername MemberListe end; ![]() |
AW: Class Helper for Interface
Zitat:
Allen Bauer redet aber schon seit Jahren davon, dass sie zu einem rooted Type System wollen. Man kann übrigens auch heute schon den Compiler entsprechend hacken, dass er record helper Vererbung zulässt ;) (fragt mich jetzt aber nicht, wie - keine Ahnung) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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