![]() |
verschiedene class helper für eine Klasse
kann ich nur eine class helper Klasse für eine Basis Klasse erstellen ? meinen Code mag der Compiler irgendwie nicht ....
Delphi-Quellcode:
type
TStringClassHelper = class helper for TStrings private public end; type TStringClassHelperZusatz = class helper for TStrings private public end; |
AW: verschiedene class helper für eine Klasse
Ja, es kann immer nur einen Class Helper für je Klasse im aktuellen Scope geben.
Aber: Class Helper von Klassen sind vererbbar:
Delphi-Quellcode:
Eine andere Alternative, wenn es denn machbar ist, wären noch Class Helper für unterschiedliche Klassen:
type
TStringClassHelper = class helper for TStrings end; type TStringClassHelperZusatz = class helper(TStringClassHelper) for TStrings end;
Delphi-Quellcode:
Eine TStringList kennt dann die Methoden aus beiden Helpern.
type
TStringClassHelper = class helper for TStrings end; type TStringListClassHelper = class helper for TStringList end; |
AW: verschiedene class helper für eine Klasse
Genau, es geht blöder Weise immer nur Einer, je Typ. (ich glaub nicht, dass Emba das jemals gefixt bekommt, wenn die es nichtmal schaffen von DebugDCUs den Haken wieder zu entfernen)
[edit] Auch Helper am Vorfahren haben manchmal Probleme, aber normal geht es. Aber Class Helper kann man vererben.
Delphi-Quellcode:
, also
TMyHelper = class helper (TAndererHelper) for TIrgendwas
Delphi-Quellcode:
wie beim
classHelper(x)
Delphi-Quellcode:
class(x)
Nur bei RecordHelpern ist man angearscht, z.B. wenn man eigene Helper an string hängen will. Ebenso kann man für abgeleitete Typen keine Helper mehrfach anhängen (wiederverwenden). z.B. TCaption (.Caption an Forms, Labels, Buttons usw.) fehlen alle Helper vom String. |
AW: verschiedene class helper für eine Klasse
Zitat:
|
AW: verschiedene class helper für eine Klasse
Zitat:
Das aus TStringClassHelper sehe ich nicht, es lässt sich aber ohne Fehler übersetzen und funktioniert. |
AW: verschiedene class helper für eine Klasse
Zitat:
|
AW: verschiedene class helper für eine Klasse
Zitat:
In dem Fall sehe ich da keinen Bug, sondern eine logisch begründete technische Einschränkung. |
AW: verschiedene class helper für eine Klasse
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.
|
AW: verschiedene class helper für eine Klasse
Zitat:
Das würde uns jetzt aber auf ein anderes Gleis, weg vom eigentlichen Thema, bringen. Ich wollte nur den Negativismus gleich am jahresanfang etwas dämpfen ;-) |
AW: verschiedene class helper für eine Klasse
Zitat:
Genauso, wie Overload, bzw. Ohne. Der Helper, welcher zuletzt im Scope liegt, dessen Methode/Property hat Vorrang. (je nach Signatur) |
AW: verschiedene class helper für eine Klasse
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:
In einer Unit, die beide Units einbindet, kann man dann doch nur eines der
unit Unit2;
type TWuppdiHelper2 = class helper for TWuppdi procedure DoWuppdi(); end
Delphi-Quellcode:
aufrufen.
DoWuppdi()
|
AW: verschiedene class helper für eine Klasse
Dann wird eben der genommen, der zuletzt eingebunden wurde. Das geht mit regulären Prozeduren ja auch.
|
AW: verschiedene class helper für eine Klasse
Worauf Janni hinaus will ist wohl, dass man bei Helpern nicht einfach den Unit-Namen voranstellen kann, um den Default zu überschreiben.
|
AW: verschiedene class helper für eine Klasse
Ja gut, dann ist das eben so. Aber der Ist-Zustand ist ja auch nicht das Gelbe vom Ei.
|
AW: verschiedene class helper für eine Klasse
Zitat:
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. |
AW: verschiedene class helper für eine Klasse
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.
|
AW: verschiedene class helper für eine Klasse
Zitat:
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:
Die Wrapper-Units müssen dann ja auch nur die Namenskollisionen auflösen, der Rest kann ja so verwendet werden.
unit Unit2Wrapper;
interface type TWuppdiHelper2Wrapper = class helper for TWuppdi procedure DoWuppdi2(); end; implementation uses Unit2; procedure TWuppdiHelper2Wrapper.DoWuppdi2; begin DoWuppdi; end; Ü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; Zitat:
|
AW: verschiedene class helper für eine Klasse
Ergibt es eigentlich Sinn, seine Helper mit anderen Entwicklern zu teilen?
|
AW: verschiedene class helper für eine Klasse
Zitat:
![]() |
AW: verschiedene class helper für eine Klasse
Zitat:
Aber bei Borland und später Embarcadero haben sie sich damals auf ihrem ach so tollen Patent für die helper ausgeruht (was ursprünglich auch eigtl nur ein Hack war) und es nicht weiter entwickelt, während andere Sprachen diesbezüglich an ihnen vorbei gezogen sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:14 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