Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Interface (https://www.delphipraxis.net/104895-interface.html)

BenjaminH 12. Dez 2007 13:23


Interface
 
Hallo,
ich möchte mich mal ein bisschen mit Interfaces beschäftigen. Ich habe aber irgendwie garkeinen Plan davon.
Kennt jemand ein Tutorial dafür? Ich habe keines gefunden.

Das Konzept von Interfaces ist mir auch nicht so ganz klar.
Vielleicht kann mir da ja jemand helfen?

Vielen Dank,
Benjamin

Matze 12. Dez 2007 13:32

Re: Interface
 
Hallo Benni,

das wäre vielleicht etwas für dich (betrachte auch die folgenden Links): Interfaces und Delegation durch "implements".

Grüße

vlees91 12. Dez 2007 13:32

Re: Interface
 
Wenn ich mich nicht irre, hilft das weiter: [google]"Modellierung und Systementwicklung"[/google]

grml, warum werden die "'s aus dem suchquery entfernt

BenjaminH 12. Dez 2007 13:38

Re: Interface
 
Danke! Das ging ja mal wieder superschnell.
@Matze: Perfekt, jetzt werde ich wissen, wie das funktioniert.
@vlees: Perfekt, jetzt werde ich wissen, wofür ich das brauch.

Warum habe ich das nicht gefunden? :gruebel:

So, jetzt ergibt sich folgende Frage:
Was bringt einem der GUI String, dabei?
In den beiden Links aus dem Thread, den Matze verlinkt hat, wird darauf nicht eingegangen.

sirius 12. Dez 2007 13:58

Re: Interface
 
Zitat:

Zitat von BenjaminH
Was bringt einem der GUI String, dabei?
In den beiden Links aus dem Thread, den Matze verlinkt hat, wird darauf nicht eingegangen.

Du meinst GUID :zwinker:
Das bringt dir, dass du eine GUID vorgeben kannst, ansonsten bekommst du IMHO eine vom Compiler verpasst. Damit hat dein Interface eine weltweit einmalige ID und man kann es darüber finden/ansprechen/ignorieren.

xaromz 12. Dez 2007 14:01

Re: Interface
 
Hallo,

ich hatte da auch mal was geschrieben.

Gruß
xaromz

BenjaminH 12. Dez 2007 14:07

Re: Interface
 
So, nächstes Problem:
Ich habe ein Interface von einem anderen abgeleitet:
Delphi-Quellcode:
IShape=Interface
...
IRect=Interface(IShape)
..
TRect=class(TInterfacedObject, IRect)
Var Shape:IShape;

Shape:=TRect.Create
Ich kann IShape ein Objekt, das von einem Nachfahren von IShape abgeleitet ist, nicht zuweisen?
Warum?

Viele Grüße,
Benjamin
[Edit]@xaromz: Danke, das Thema wird ja immer genialer.

Elvis 12. Dez 2007 14:31

Re: Interface
 
Zitat:

Zitat von BenjaminH
Delphi-Quellcode:
IShape=Interface
...
IRect=Interface(IShape)
..
TRect=class(TInterfacedObject, IRect)
Var Shape:IShape;

Shape:=TRect.Create
Ich kann IShape ein Objekt, das von einem Nachfahren von IShape abgeleitet ist, nicht zuweisen?
Warum?

Die Interfaces müssen GUIDs haben, die GUID wird nicht autom. erzeugt (@Jesus).
Nur über die GUID wird der Typ des Interfaces gehandhabt.
Außerdem musst du beim Implementieren eines Interfaces auch sämtliche Vorfahren dieses Interfaces angeben, die du implementieren willst.
Das nervt wie Hölle, aber ohne gates nicht...

BenjaminH 12. Dez 2007 14:37

Re: Interface
 
ok, damit kann ich leben.
Die GUIDs werden dann also zum unterscheiden der Interfaces verwendet. So wie bei xaromz mit Supports.
Haben sie noch eine andere Funktion?

Elvis 12. Dez 2007 14:45

Re: Interface
 
Zitat:

Zitat von BenjaminH
Haben sie noch eine andere Funktion?

Man kann einen Interfacetypen als GUID benutzen.
also so
Delphi-Quellcode:
var
  eineGuid : TGuid;
begin
  eineGuid := IRect;
end;
Damit wiederum kann man ziemlich coole Dinge bauen, wie Dictionaries, die pro GUID eine Factory haben oder was-weiß-ich-noch-alles...

BenjaminH 12. Dez 2007 20:31

Re: Interface
 
Eine Frage hab ich noch:
Ist es schöner so
Delphi-Quellcode:
Supports(Shape, IRect)
oder so
Delphi-Quellcode:
Supports(Shape, IID_Rect)
zu prüfen?
Soll ich also das deklarieren?
Delphi-Quellcode:
IID_Rect: TGUID = '{3E96B3FB-800B-4C84-BE44-A9A5C70C1863}';
Oder weglassen und auf das Interface direkt prüfen?

Vielen Dank!

Viele Grüße, Benjamin

Elvis 12. Dez 2007 20:41

Re: Interface
 
Ich nutze den Interface-Typen selbst als GUID, keine Ahnung warum viele die GUID als eigenständige Konstante deklarieren.
IMHO, sorgt das nur für noch mehr Müll in der code completion, ziemlich hässlicher Müll sogar, wenn du diese eklige Namenskonvention beibehältst.

vlees91 13. Dez 2007 08:15

Re: Interface
 
Zitat:

Zitat von vlees91
Wenn ich mich nicht irre, hilft das weiter: [google]"Modellierung und Systementwicklung"[/google]

Oo. Das ist niht dafuer da, wie man ein Interface verwirklicht, sondern wie es optimalerweise aussehen soll (sodass der User das Programm nicht direkt vom PC kickt).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.

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