AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Class helper wird angewendet obwohl er es nicht sollte

Class helper wird angewendet obwohl er es nicht sollte

Ein Thema von Der schöne Günther · begonnen am 15. Mai 2019 · letzter Beitrag vom 15. Mai 2019
Antwort Antwort
Der schöne Günther

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

Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 10: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
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.184 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 11:05
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.184 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 11:08
Nachtrag:
Tatsächlich, in XE6 ging das noch! Schräg!
Jetzt aber mal wirklich updaten Günni!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.070 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 11:13
10.0: Kompiliert.
10.3.0: E2018 Record, Objekt oder Klassentyp erforderlich
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 11:19
Jetzt aber mal wirklich updaten Günni!
Ja sollte ich wirklich mal ... 😓
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.581 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 12:40
Seit 10.1 gefixt - siehe:
https://quality.embarcadero.com/browse/RSP-13547
https://quality.embarcadero.com/browse/RSP-13574
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Class helper wird angewendet obwohl er es nicht sollte

  Alt 15. Mai 2019, 16:45
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)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf