AGB  ·  Datenschutz  ·  Impressum  







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

verschiedene class helper für eine Klasse

Ein Thema von bernhard_LA · begonnen am 10. Feb 2022 · letzter Beitrag vom 14. Jan 2025
Antwort Antwort
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.134 Beiträge
 
Delphi 2009 Professional
 
#1

AW: verschiedene class helper für eine Klasse

  Alt 2. Jan 2025, 08:46
Dann gilt die Reihenfolge der uses wie überall sonst auch, z.B. bei Klassen (ja, ich meine dich, TBitmap!) oder "globalen Methoden". Da allerdings der Class Helper keinen nach außen sichtbaren Namen hat, kann man dann leider nicht die Auswahl überschreiben, indem man die Unit angibt.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 06:58
Dann gilt die Reihenfolge der uses wie überall sonst auch, z.B. bei Klassen (ja, ich meine dich, TBitmap!) oder "globalen Methoden". Da allerdings der Class Helper keinen nach außen sichtbaren Namen hat, kann man dann leider nicht die Auswahl überschreiben, indem man die Unit angibt.
Wo soll es da ein Problem geben?
Genauso, wie Overload, bzw. Ohne.

Der Helper, welcher zuletzt im Scope liegt, dessen Methode/Property hat Vorrang. (je nach Signatur)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.134 Beiträge
 
Delphi 2009 Professional
 
#3

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 10:17
Das Problem ist, dass du die Auswahl des Compilers nicht überschreiben kannst, falls jeweils ein Class Helper für dieselbe Klasse in zwei Units dieselbe Methodensignatur hat.

Delphi-Quellcode:
unit Unit1;

type
TWuppdiHelper1 = class helper for TWuppdi
  procedure DoWuppdi();
end
Delphi-Quellcode:
unit Unit2;

type
TWuppdiHelper2 = class helper for TWuppdi
  procedure DoWuppdi();
end
In einer Unit, die beide Units einbindet, kann man dann doch nur eines der DoWuppdi() aufrufen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 10:42
Dann wird eben der genommen, der zuletzt eingebunden wurde. Das geht mit regulären Prozeduren ja auch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#5

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 10:47
Worauf Janni hinaus will ist wohl, dass man bei Helpern nicht einfach den Unit-Namen voranstellen kann, um den Default zu überschreiben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 11:27
Ja gut, dann ist das eben so. Aber der Ist-Zustand ist ja auch nicht das Gelbe vom Ei.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#7

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 12:12
Ja gut, dann ist das eben so. Aber der Ist-Zustand ist ja auch nicht das Gelbe vom Ei.
In der Tat! Man vermeidet damit zwar ein Teilproblem einer Multi-Helper Implementierung, verhindert aber die übrigen Möglichkeiten, die mit so einem Feature daherkommen.

Das Problem trifft ja auch nur bei Helpern zu, die man nicht selbst unter Kontrolle hat, sonst könnte man ja die Namen anpassen.
Aber da dann ja beliebig viele Helper erlaubt sind, gäbe es doch einen Workaround:
Delphi-Quellcode:
unit Unit1Wrapper;

interface

type
  TWuppdiHelper1Wrapper = class helper for TWuppdi
    procedure DoWuppdi1();
  end;

implementation

uses
  Unit1;

procedure TWuppdiHelper1Wrapper.DoWuppdi1;
begin
  DoWuppdi;
end;
Delphi-Quellcode:
unit Unit2Wrapper;

interface

type
  TWuppdiHelper2Wrapper = class helper for TWuppdi
    procedure DoWuppdi2();
  end;

implementation

uses
  Unit2;

procedure TWuppdiHelper2Wrapper.DoWuppdi2;
begin
  DoWuppdi;
end;
Die Wrapper-Units müssen dann ja auch nur die Namenskollisionen auflösen, der Rest kann ja so verwendet werden.

Übrigens kann ma mehrere Helper für eine Klasse schon jetzt realisieren, wenn man die Helper ableitet (muss man halt auch den Source haben und funktioniert leider nicht bei record helper):
Delphi-Quellcode:
type
  TWuppdiHelper1 = class helper for TWuppdi
    procedure DoWuppdi1;
  end;

type
  TWuppdiHelper2 = class helper(TWuppdiHelper1) for TWuppdi
    procedure DoWuppdi2;
  end;

...

  var wuppdi := TWuppdi.Create;
  try
    wuppdi.DoWuppdi1; // Code Completion sieht das zwar nicht, aber der Compiler schon.
    wuppdi.DoWuppdi2;
  finally
    wuppdi.Free;
  end;
Manchmal bekommt man ja auch den Eindruck, dass mit viel Getöse neue supertolle Features für die nächste Delphi-Version angekündigt werden, die sich dann, wenn man sie etwas intensiver als in den mitgelieferten Demos benutzen möchte, als Papiertiger erweisen.
Mein Nutzungsgrad von Helpern ist allerdings so hoch, dass man da mitnichten von Papiertigern sprechen kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.134 Beiträge
 
Delphi 2009 Professional
 
#8

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 11:46
Worauf Janni hinaus will ist wohl, dass man bei Helpern nicht einfach den Unit-Namen voranstellen kann, um den Default zu überschreiben.
Richtig. Und ich vermute, dass das der Grund ist, warum sie zwei Class Helper im Scope nicht zulassen.
Allerdings dürfte es keinen plausiblen Grund geben, für dieselbe Klasse zwei Helper-Methoden mit derselben Methodensignatur zu schreiben, die unterschiedliche Dinge tun. Also dürfte das von mir beschriebene Problem gegenüber der Einschränkung auf nur 1 Class Helper im Scope das geringe Übel sein.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#9

AW: verschiedene class helper für eine Klasse

  Alt 14. Jan 2025, 12:07
Manchmal bekommt man ja auch den Eindruck, dass mit viel Getöse neue supertolle Features für die nächste Delphi-Version angekündigt werden, die sich dann, wenn man sie etwas intensiver als in den mitgelieferten Demos benutzen möchte, als Papiertiger erweisen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 18:25 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