Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Enums in Interfaces? (https://www.delphipraxis.net/177252-enums-interfaces.html)

Der schöne Günther 28. Okt 2013 09:45

Delphi-Version: XE2

Enums in Interfaces?
 
Ich bin ein Freund von inneren Typen, beispielsweise TMeineKlasse.TMeinEnum = (eins, zwei, drei). Sieht man ja in der VCL auch häufiger.

Nun scheitere ich daran, in ein Interface eine Typdeklaration zu pflanzen. Typdeklarationen mag er nicht:
Delphi-Quellcode:
   ISomeInterface = interface
      type TSomeEnum = (eins, zwei, drei); // Geht nicht
   end;
Mir ist die Klasse
Delphi-Quellcode:
Vcl.OleCtrls.TOleEnum
vor die Füße gefallen, aber weder habe ich die jemals gesehen noch wüsste ich spontan damit etwas anzufangen. Bleibt mir etwas anderes übrig, als das Enum aus der Klasse herauszuziehen?
Delphi-Quellcode:
   TSomeEnum = (eins, zwei, fünnef);

   ISomeInterface = interface
      function getEnum(): TSomeEnum;

   end;

jaenicke 28. Okt 2013 10:10

AW: Enums in Interfaces?
 
Diese Funktionalität wird in Interfaces wie sie Windows kennt nicht unterstützt. Die Interfaces in Delphi können das daher auch nicht. (Deshalb gibt es auch keine Generics innerhalb eines Interfaces auf einzelne Felder oder Methoden.)

Stevie 28. Okt 2013 11:06

AW: Enums in Interfaces?
 
Zitat:

Zitat von jaenicke (Beitrag 1233393)
(Deshalb gibt es auch keine Generics innerhalb eines Interfaces auf einzelne Felder oder Methoden.)

Das liegt eher daran, dass Interface Methoden virtuelle Methoden sind und virtuelle Methoden können nicht generisch (parametrisiert) sein.

Mikkey 29. Okt 2013 17:38

AW: Enums in Interfaces?
 
Der Ansatz, den ich auch aus C# kenne, definiert die Typen zusammen mit dem Interface in einer Datei (ob sich das nun 'unit' oder "Namespace" nennt, finde ich relativ Wurscht):

Delphi-Quellcode:
unit TestInterface;

interface

type TEnum = (eins, zwei, drei);

ISomeInterface = interface
  function GetEnum(): TEnum;
end;

implementation

end.
Interfacedefinitionen sind halt eine relativ flache Angelegenheit.

Furtbichler 29. Okt 2013 19:47

AW: Enums in Interfaces?
 
Ja, nun. Das Enum kann auch in eine eigene Datei. Ist auch wurscht, aber wenn schon alles separieren, dann alles separieren :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz