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 zu Object? (https://www.delphipraxis.net/43218-interface-zu-object.html)

DSeven 30. Mär 2005 22:38


Interface zu Object?
 
Hallo,

Habe ein Problem mit Interfaces.
Wie kann ich wenn ich ein Interface habe (ITab) es wieder ins urspüngliche Object (TEditTab) casten?
Bekomme immer eine Fehlermeldung bei dem versuch.

cya

bttb930 30. Mär 2005 23:41

Re: Interface zu Object?
 
das geht nicht, soweit ich weiß. widerspricht jedenfalls der theorie eines interfaces.

vielleicht mit dirty tricks, etwa TEditTab(@MyInterface) oder so. Aber keine Ahnung ob das geht... Glaubs eher nicht

delphifan2004 31. Mär 2005 00:14

Re: Interface zu Object?
 
Hallo DSeven!

Zitat:

Zitat von DSeven
Wie kann ich wenn ich ein Interface habe (ITab) es wieder ins urspüngliche Object (TEditTab) casten?

Warum willst Du das machen?

Delphi-Quellcode:
unit TabIntf;

Interface

uses ...benötigte Units

type
  ITab = Interface(IUnknown)
   ... Interface-Methoden
  end;

type
  TEditTab = class(irgendein passender Vorfahre, ITab)
  ... Interface Methoden -> Siehe ITab
  end;

var EditTab: TEditTab; //Nun kannst Du ganz normal mit dem Objekt arbeiten, wie mit jedem
                       //anderen Delphi Objekt.

implementation


//...Interface Methoden in der Klasse implementiert
procedure TEditTab.Methode1;
begin
  //Hier folgt die korrekte Implementation
end;

function TEditTab.Methode2: Rückgabetyp;
begin
  //Hier folgt die korrekte Implementation
end;

end.
Das Interface dient nur als Schnittstelle. Die Implementation erfolgt in einer Klasse, die das Interface einbindet. Siehe Quelltext. Damit hast Du auch eine Instanzvariable für das Objekt. Wozu da das Type-Casting?

Delphifan2004

DSeven 31. Mär 2005 02:07

Re: Interface zu Object?
 
Du kennst ja den Aufbau meines Programms nicht.
also ich habe keine keinen zugriff auf die Instanz da es ja mehrere Inszanzen gibt und diese sind eben in einer liste.
Und aus der liste holl ich mir dann immer das Interface.


Es ist schon klar das wenn ich nur ein Object hätte ich eben immer darauf zugreifen kann.
Aber ich erstelle immer eine temporäre instanz diese wird in die liste eingetragen und die lokale variable wird dann ungültig.

cya

Sanchez 31. Mär 2005 06:36

Re: Interface zu Object?
 
Hallo,

So würde es funktionieren, auch wenns nicht unbedingt schönes Design ist:
Delphi-Quellcode:
type
  TEditTab = class;

  ITab = Interface(IUnknown)
    function GetObject: TEditTab;
  end;

  TEditTab = class(irgendein passender Vorfahre, ITab)
    function GetObject: TEditTab;
  end;

procedure TEditTab.Methode1;
begin
  result := self;
end;
Um die forward-Deklaration von TEditTab zu vermeiden, kannst du auch bei GetObject einen Vorfahren zurückgeben.

grüße, daniel

maximov 31. Mär 2005 10:56

Re: Interface zu Object?
 
Als lektüre zu einem verwandten thema, kann ich diesen thread empfehlen:
http://www.delphipraxis.net/internal...ct.php?t=36554

DSeven 31. Mär 2005 14:05

Re: Interface zu Object?
 
Zitat:

Zitat von Sanchez
Hallo,

So würde es funktionieren, auch wenns nicht unbedingt schönes Design ist:
Delphi-Quellcode:
type
  TEditTab = class;

  ITab = Interface(IUnknown)
    function GetObject: TEditTab;
  end;

  TEditTab = class(irgendein passender Vorfahre, ITab)
    function GetObject: TEditTab;
  end;

procedure TEditTab.Methode1;
begin
  result := self;
end;
Um die forward-Deklaration von TEditTab zu vermeiden, kannst du auch bei GetObject einen Vorfahren zurückgeben.

grüße, daniel

Hehe genau so mache ich es ja im moment dachte nur das da irgendwie einen einfacheren Weg gibt, oder besser gesagt einen besseren.

cya


Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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