AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstanten im Interface

Ein Thema von Der schöne Günther · begonnen am 6. Jan 2014 · letzter Beitrag vom 6. Jan 2014
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

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

Konstanten im Interface

  Alt 6. Jan 2014, 13:14
Delphi-Version: XE5
In Delphi können Interfaces keine Konstanten haben, oder?

Ja, es sind in der Regel Implementations-Details die dort nicht hineingehören. Ich ziehe Standard-Belegungen für Parameter immer gerne in Konstanten raus:

Delphi-Quellcode:
TSomeClass = class
   private const
      Param_someProc_someParam = 12;
   public
      procedure someProc(const someParam: Integer = Param_someProc_someParam);
end;
In einem Interface bleibt mir nur
Delphi-Quellcode:
ISomeInterface = interface
   procedure someProc(const someParam: Integer = 12);
end;
Oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Konstanten im Interface

  Alt 6. Jan 2014, 13:20
In Delphi können Interfaces keine Konstanten haben, oder?
Wie wäre es mit Ausprobieren?

(ich glaub zwar nicht, wobei aber z.B. Property möglich sind, obwohl Interfaces sowas eigentlich auch nicht haben)

public, protected und private gibt es allerdings leider auch nicht, wobei man das private via Interface-Vererbung indirekt nutzen kann, um z.B. das "private" vor der Codevervollständigung zu verstecken.
$2B or not $2B

Geändert von himitsu ( 6. Jan 2014 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Konstanten im Interface

  Alt 6. Jan 2014, 13:47
Eine Möglichkeit:
Delphi-Quellcode:
  TSomeBaseClass = class(...)
  private const
    Param_someProc_someParam = 12;
  end;

  ISomeInterface = interface
    procedure someProc(const someParam: Integer = TSomeBaseClass.Param_someProc_someParam);
  end;

  TSomeClass = class(TSomeBaseClass,ISomeInterface)
  public
    procedure someProc(const someParam: Integer = TSomeBaseClass.Param_someProc_someParam);
  end;
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 6. Jan 2014 um 13:49 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Konstanten im Interface

  Alt 6. Jan 2014, 14:00
Natürlich habe ich selbst probiert und gesucht.

Properties helfen einem für Default-Parameter nicht weiter.

Das mit "private" und Interface-Vererbung verstehe ich nicht. Hast du ein Beispiel?


Thom, das Interface von der Klasse abhängig zu machen ist keine gute Idee. Aber: Deine TSomeBaseClass macht doch noch einmal deutlich, dass die Parameterbelegung eine Implementierungseigenschaft ist: Die implementierende Klasse kann einen Standardwert vorgeben, selbst wenn das Interface kein vorgibt!

Da hatte ich irgendwie ein Brett vorm Kopf
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Konstanten im Interface

  Alt 6. Jan 2014, 14:09
Du hattest doch selbst die Idee, die Konstante in der (implementierenden) Klasse unterzubringen. Willst Du das nicht, dann definier doch einfach eine globale Konstante:
Delphi-Quellcode:
const
  Param_someProc_someParam = 12;

type
  ISomeInterface = interface
    procedure someProc(const someParam: Integer = Param_someProc_someParam);
  end;

  TSomeClass = class(...,ISomeInterface)
  public
    procedure someProc(const someParam: Integer = Param_someProc_someParam);
  end;
Die implementierende Klasse kann einen Standardwert vorgeben, selbst wenn das Interface kein vorgibt!
Falls das eine Frage war: Ja.
Delphi-Quellcode:
type
  ISomeInterface = interface
    procedure someProc(const someParam: Integer);
  end;

  TSomeClass = class(...,ISomeInterface)
  private type
    Param_someProc_someParam = 12;
  public
    procedure someProc(const someParam: Integer = Param_someProc_someParam);
  end;
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 6. Jan 2014 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Konstanten im Interface

  Alt 6. Jan 2014, 14:19
Delphi-Quellcode:
  ISomeInterface = interface
  {private} const
    Param_someProc_someParam = 12;
  private // geht nicht
    function MyGetter: Integer;
    procedure MySetter(Value: Integer);
    function MyGetter2(Index: Integer): Integer;
    procedure MySetter2(Value, Index: Integer);
  public
    procedure someProc(const someParam: Integer = Param_someProc_someParam);
    property MyProperty: Integer read MyGetter write MySetter; // geht
    property MyProperty2: Integer index 1 read MyGetter write MySetter; // Index geht nicht
    property MyProperty3: Integer index 2 read MyGetter write MySetter;
  end;
Delphi-Quellcode:
  TSomeClass = class(TSomeBaseClass,ISomeInterface)
  public
    procedure someProc(const someParam: Integer = TSomeBaseClass.Param_someProc_someParam);
  end;
Wenn du die Klasse nur als Interface brauchst, dann kannst du in der Klasse auch den Default-Wert weglassen.

Ansonsten ist die Idee von Thom eh besser, also die Konstante in einer Klasse zu definieren und in beiden Definitionen (Interface und Klasse) die selbe Konstante zu nutzen,
wobei TSomeClass nicht unbedingt von TSomeBaseClass abgeleitet sein muß.


PS: Die Benamung von Param_someProc_someParam finde ich etwas unglücklich.
Was ist, wenn diese Konstante auch an anderen Stellen verwendet wird?
Da wäre es ja eigentlich besser die "Funktion" als Namen zu nehmen und nicht den Ort.
$2B or not $2B

Geändert von himitsu ( 6. Jan 2014 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Konstanten im Interface

  Alt 6. Jan 2014, 14:37
In Delphi können Interfaces keine Konstanten haben, oder?
Es wäre mir neu, dass das in anderen Sprachen bei Interfaces geht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Konstanten im Interface

  Alt 6. Jan 2014, 14:58
Aber prinzipiell gibt es keinen Grund, warum es in Gelphi nicht gehen sollte.

Die Konstanten werden ja zur CompileTime aufgelöst und sind dann, zur Laufzeit, letztendlich nicht mehr im Interface vorhanden.
$2B or not $2B
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Konstanten im Interface

  Alt 6. Jan 2014, 15:03
In Delphi können Interfaces keine Konstanten haben, oder?
Es wäre mir neu, dass das in anderen Sprachen bei Interfaces geht.
Also in Java sehe ich das relativ häufig. Immer wieder spaßig wenn zwei implementierte Interfaces auch noch jeweils eine Konstante mit dem selben Namen haben


Konstanten habe ich Delphi sowieso noch nicht so ganz verstanden. Ich vermisse bsp. immer noch ein bisschen, die Konstanten eines Objekts erst im Konstruktor setzen zu können. In C++ geht das ja über den Element-Initialisierer...
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Konstanten im Interface

  Alt 6. Jan 2014, 15:10
In Delphi können Interfaces keine Konstanten haben, oder?
Es wäre mir neu, dass das in anderen Sprachen bei Interfaces geht.
In Java hat die Möglichkeit, innerhalb einer Interface-Deklaration auch Konstanten zu definieren, immer schon bestanden. Es macht auch Sinn, da es ermöglicht, Zusammengehörendes gemeinsam zu definieren.

Code:
public interface GroupedInterface extends Interface1, Interface2, Interface3 {

    // constant declarations
   
    // base of natural logarithms
    double E = 2.718282;
 
    // method signatures
    void doSomething (int i, double x);
    int doSomethingElse(String s);
}
http://docs.oracle.com/javase/tutori...erfaceDef.html
Michael Justin

Geändert von mjustin ( 6. Jan 2014 um 15:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:08 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