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?