![]() |
Delphi-Version: 10 Seattle
Class helper wird angewendet obwohl er es nicht sollte
Ich habe einen Class Helper der sich auf Dinge anwenden lässt für die er nie gedacht war. Der Compiler hat nichts dagegen, die Code-Vervollständigung schläft es sogar aktiv vor - Nur zur Laufzeit fliegt einem natürlich alles um die Ohren.
Folgender Helper:
Delphi-Quellcode:
Und folgendes Progrämmchen:
unit Unit3;
interface uses System.Generics.Collections; type TSomething = class(TObject); TSomethingEnumerator = TEnumerator<TSomething>; TSomethingEnumeratorHelper = class helper for TSomethingEnumerator procedure __TSomethingEnumeratorHelper(); end; implementation procedure TSomethingEnumeratorHelper.__TSomethingEnumeratorHelper(); begin WriteLn(self.Current.QualifiedClassName()); end; end.
Delphi-Quellcode:
program Project3;
uses System.SysUtils, Unit3 in 'Unit3.pas'; var bytes: TBytes; begin bytes.__TSomethingEnumeratorHelper(); // << compiles end. TEnumerator<T> ist nur ein Beispiel. Wichtig ist dass "TSomethingEnumerator" ein Alias für etwas generisches ist. Dann wird der Helper auf alles generische angewendet! TBytes ist ja beispielsweise auch nur
Delphi-Quellcode:
.
TArray<TBytes>
Verrückt. Kann ich das irgendwie verhindern? Ist das in späteren Delphi-Versionen behoben? |
AW: Class helper wird angewendet obwohl er es nicht sollte
Kompiliert so wie du es schreibst in 10.2.3 Tokyo zumindest nicht.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Unit1 in 'Unit1.pas'; var bytes: TBytes; begin bytes.__TSomethingEnumeratorHelper(); // << [dcc32 Error] Project1.dpr(14): E2018 Record, object or class type required end. |
AW: Class helper wird angewendet obwohl er es nicht sollte
Nachtrag:
Tatsächlich, in XE6 ging das noch! Schräg! :shock: Jetzt aber mal wirklich updaten Günni! |
AW: Class helper wird angewendet obwohl er es nicht sollte
10.0: Kompiliert.
10.3.0: E2018 Record, Objekt oder Klassentyp erforderlich |
AW: Class helper wird angewendet obwohl er es nicht sollte
Zitat:
|
AW: Class helper wird angewendet obwohl er es nicht sollte
Seit 10.1 gefixt - siehe:
![]() ![]() |
AW: Class helper wird angewendet obwohl er es nicht sollte
Niemals zuvor war eine Frage vollständiger und endgültiger beantwortet 👍
Aber es gibt keinen Workaround das irgendwie zu "verhindern" dass so etwas kompiliert, oder? (Außer updaten) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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