Einzelnen Beitrag anzeigen

Der schöne Günther

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

Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 11:56
Delphi-Version: 10 Seattle
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:
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.
Und folgendes Progrämmchen:

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 TArray<TBytes> .

Verrückt. Kann ich das irgendwie verhindern? Ist das in späteren Delphi-Versionen behoben?
  Mit Zitat antworten Zitat