AGB  ·  Datenschutz  ·  Impressum  







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

Interface zu Object?

Ein Thema von DSeven · begonnen am 30. Mär 2005 · letzter Beitrag vom 31. Mär 2005
Antwort Antwort
DSeven

Registriert seit: 13. Aug 2003
114 Beiträge
 
#1

Interface zu Object?

  Alt 30. Mär 2005, 23:38
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
Die Freie Entwicklungsumgebung für PHP
Symtec Development Studio
auf http://www.nostalb.de
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: Interface zu Object?

  Alt 31. Mär 2005, 00:41
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
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
272 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Interface zu Object?

  Alt 31. Mär 2005, 01:14
Hallo DSeven!

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
  Mit Zitat antworten Zitat
DSeven

Registriert seit: 13. Aug 2003
114 Beiträge
 
#4

Re: Interface zu Object?

  Alt 31. Mär 2005, 03:07
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
Die Freie Entwicklungsumgebung für PHP
Symtec Development Studio
auf http://www.nostalb.de
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#5

Re: Interface zu Object?

  Alt 31. Mär 2005, 07:36
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
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Interface zu Object?

  Alt 31. Mär 2005, 11:56
Als lektüre zu einem verwandten thema, kann ich diesen thread empfehlen:
http://www.delphipraxis.net/internal...ct.php?t=36554
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
DSeven

Registriert seit: 13. Aug 2003
114 Beiträge
 
#7

Re: Interface zu Object?

  Alt 31. Mär 2005, 15:05
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
Die Freie Entwicklungsumgebung für PHP
Symtec Development Studio
auf http://www.nostalb.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:22 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