Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Class Helper for Interface (https://www.delphipraxis.net/183972-class-helper-interface.html)

himitsu 17. Feb 2015 08:19

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.

Dejan Vu 17. Feb 2015 08:29

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:
type
  IFoo = Interface
     procedure FooMethod;
  end;

  Foo = Class (IFoo)
    public procedure FooMethod;
  end
Foo implementiert also IFoo. Gut.

Nun erweitere ich IFoo mit einem Helper
Delphi-Quellcode:
  IFooHelper = interface helper for IFoo
    procedure Bar;
  end;
...
var Foo : IFoo;
...
Foo.Bar; // das geht also.

Var oldFoo : Foo;

begin
  Foo.Bar // und das?
Preisfrage: Wo ist 'Bar' denn implementiert? Im Interface sicherlich nicht...

Stevie 17. Feb 2015 08:38

AW: Class Helper for Interface
 
Zitat:

Zitat von Dejan Vu (Beitrag 1290143)
Preisfrage: Wo ist 'Bar' denn implementiert? Im Interface sicherlich nicht...

Delphi-Quellcode:
IFooHelper = interface helper for IFoo
  procedure Bar;
end;
ist equivalent zu:

Delphi-Quellcode:
procedure Bar(const Self: IFoo);
Damit kannste dir die Frage selbst beantworten.

himitsu 17. Feb 2015 08:52

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)

sh17 17. Feb 2015 09:01

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.

Der schöne Günther 17. Feb 2015 09:05

AW: Class Helper for Interface
 
Bestimmt. Die ersten Requests im QC sind erst seit knapp sieben Jahren offen. Sind also schätzungsweise noch etwa 4-6 Jahre. 8-)

himitsu 17. Feb 2015 09:26

AW: Class Helper for Interface
 
Delphi ist ja bald richtig erwachsen ... mit 35 sind dann wohl auch die letzten Jugendsünden behoben. :angel:

Der schöne Günther 17. Feb 2015 09:38

AW: Class Helper for Interface
 
Ich will gar nicht wissen wie dann die Midlife Crisis aussieht.

Sir Rufo 17. Feb 2015 09:58

AW: Class Helper for Interface
 
Das mit den mehrfachen Helpern ist wohl angemacht, oder kann mir ansonsten jemand das hier erklären
Delphi-Quellcode:
type
   Bezeichnername = class|record helper [(Vorfahrenliste)] for TypBezeichnername
       MemberListe
     end;
Oder was ist da mit dieser Vorfahrenliste gemeint? Die Dokumentation schweigt sich darüber pauschal erst mal aus.

Stevie 17. Feb 2015 10:05

AW: Class Helper for Interface
 
Zitat:

Zitat von Sir Rufo (Beitrag 1290152)
Das mit den mehrfachen Helpern ist wohl angemacht, oder kann mir ansonsten jemand das hier erklären
Delphi-Quellcode:
type
   Bezeichnername = class|record helper [(Vorfahrenliste)] for TypBezeichnername
       MemberListe
     end;
Oder was ist da mit dieser Vorfahrenliste gemeint? Die Dokumentation schweigt sich darüber pauschal erst mal aus.

class helper kannste voneinander erben lassen, record helper nicht.
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 23:01 Uhr.
Seite 2 von 4     12 34      

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