AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es.
Thema durchsuchen
Ansicht
Themen-Optionen

Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es.

Offene Frage von "Der schöne Günther"
Ein Thema von Der schöne Günther · begonnen am 8. Jul 2014 · letzter Beitrag vom 9. Jul 2014
Antwort Antwort
Der schöne Günther

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

Code Completion listet keinen Helferkram für Oberklassen, aber kompiliert wird es.

  Alt 8. Jul 2014, 19:37
Grade nochmal in XE5 und XE6 getestet:

Wenn man eine Helferklasse für bsp. TThread bastelt und sich einen eigenen Thread TMyThread = class(TThread) definiert lassen sich die Hilfsmethoden in jeder TThread -Unterklasse verwenden. Von der Code Completion werden diese Methoden aber nur angezeigt wenn man eine 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.

Geändert von Der schöne Günther ( 8. Jul 2014 um 19:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#2

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

  Alt 9. Jul 2014, 07:32
Wenn man eine Helferklasse für bsp. TThread bastelt und sich einen eigenen Thread TMyThread = class(TThread) definiert lassen sich die Hilfsmethoden in jeder TThread -Unterklasse verwenden. Von der Code Completion werden diese Methoden aber nur angezeigt wenn man eine 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 )

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 TMyThread Methoden haben kannst, die auch der 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 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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 9. Jul 2014, 07:34
Ändere einmal die Deklarationsreihenfolge
Miniaturansicht angehängter Grafiken
ch.jpg  
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 9. Jul 2014, 10:04
Ändere einmal die Deklarationsreihenfolge
Das funktioniert auch ohne Ändern der Reihenfolge
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

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

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

  Alt 9. Jul 2014, 11:13
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 TMyThread Methoden haben kannst, die auch der TThreadHelper hat, welche dann von letzterem nicht verborgen werden
Oh! Danke für den Hinweis.
  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 06:49 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