Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es. (https://www.delphipraxis.net/181018-code-completion-listet-keinen-helferkram-fuer-oberklassen-aber-kompiliert-wird-es.html)

Der schöne Günther 8. Jul 2014 18:37

Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es.
 
Grade nochmal in XE5 und XE6 getestet:

Wenn man eine Helferklasse für bsp.
Delphi-Quellcode:
TThread
bastelt und sich einen eigenen
Delphi-Quellcode:
Thread TMyThread = class(TThread)
definiert lassen sich die Hilfsmethoden in jeder
Delphi-Quellcode:
TThread
-Unterklasse verwenden. Von der Code Completion werden diese Methoden aber nur angezeigt wenn man eine
Delphi-Quellcode:
TThread
-Referenz verwendet.

Hier nochmal ein kurzes Beispiel:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses System.Classes;

type

   TMyThread = class(TThread)
      protected procedure Execute(); override;
   end;

   TThreadHelper = class helper for TThread
      public procedure helperStuff();
   end;

procedure TThreadHelper.helperStuff();
begin
   //
end;

procedure TMyThread.Execute();
begin
   while not Terminated do helperStuff();
   // Würde angezeigt:
   // (self as TThread).helperStuff();
end;

begin
   //
end.
Ist das so gewollt? Wenn ja, warum?


PS: Helferklassen können ja sogar voneinander erben. Ich kann nun einen TMyThreadHelper bauen der von TThreadHelper erbt und weitere Dinge einführt. Aber die Code Completion schlägt immer noch nichts vor.

JamesTKirk 9. Jul 2014 06:32

AW: Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1264866)
Wenn man eine Helferklasse für bsp.
Delphi-Quellcode:
TThread
bastelt und sich einen eigenen
Delphi-Quellcode:
Thread TMyThread = class(TThread)
definiert lassen sich die Hilfsmethoden in jeder
Delphi-Quellcode:
TThread
-Unterklasse verwenden. Von der Code Completion werden diese Methoden aber nur angezeigt wenn man eine
Delphi-Quellcode:
TThread
-Referenz verwendet.

Wahrscheinlich haben da diejenigen, welche die Helper implementiert haben, nicht gut genug mit denjenigen kommuniziert, welche die Code Completion implementiert haben. Das funktioniert so bereits seit Delphi 2006 und FPC implementiert das ebenso ;)

Zitat:

PS: Helferklassen können ja sogar voneinander erben. Ich kann nun einen TMyThreadHelper bauen der von TThreadHelper erbt und weitere Dinge einführt. Aber die Code Completion schlägt immer noch nichts vor.
Aber in Delphi nur Helper für Klassen. Bei Helpern für Records oder primitive Typen geht das nicht. (In FPC habe ich diese Einschränkung für alle anderen Modi außer Delphi auch aufgehoben :mrgreen: )

Wenn du mit Vererbung und Helpern spielst solltest du übrigens die folgenden beiden Punkte beachten:
  • außerhalb eines Helpers wird zuerst nach einem Helper für die konkrete Klasse gesucht, danach in der Klasse selbst und als drittes wird dieses Spiel mit jeder Elternklasse fortgesetzt; das heißt. dass du in deinem
    Delphi-Quellcode:
    TMyThread
    Methoden haben kannst, die auch der
    Delphi-Quellcode:
    TThreadHelper
    hat, welche dann von letzterem nicht verborgen werden
  • innerhalb eines Helpers ist die Suchlogik etwas obskur: zuerst wird im konkreten Helper gesucht (hier zum Beispiel
    Delphi-Quellcode:
    TMyThreadHelper
    ), dann in der erweiterten Klasse. Als nächstes in den vererbten Helpertypen (ohne deren erweiterten Typ zu betrachten) und dann in den Elternklassen der erweiterten Klasse

Gruß,
Sven

mkinzler 9. Jul 2014 06:34

AW: Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ändere einmal die Deklarationsreihenfolge

Sir Rufo 9. Jul 2014 09:04

AW: Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es
 
Zitat:

Zitat von mkinzler (Beitrag 1264874)
Ändere einmal die Deklarationsreihenfolge

Das funktioniert auch ohne Ändern der Reihenfolge ;)

Der schöne Günther 9. Jul 2014 10:13

AW: Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es
 
Zitat:

Zitat von JamesTKirk (Beitrag 1264873)
außerhalb eines Helpers wird zuerst nach einem Helper für die konkrete Klasse gesucht, danach in der Klasse selbst und als drittes wird dieses Spiel mit jeder Elternklasse fortgesetzt; das heißt. dass du in deinem
Delphi-Quellcode:
TMyThread
Methoden haben kannst, die auch der
Delphi-Quellcode:
TThreadHelper
hat, welche dann von letzterem nicht verborgen werden

Oh! :o Danke für den Hinweis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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