AGB  ·  Datenschutz  ·  Impressum  







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

Interfaces in Delphi

Ein Thema von squetk · begonnen am 28. Jun 2007 · letzter Beitrag vom 29. Jun 2007
Antwort Antwort
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
118 Beiträge
 
Delphi XE2 Professional
 
#1

Interfaces in Delphi

  Alt 28. Jun 2007, 23:21
Hallo,

ich experimentiere zur Zeit mit der Implementation von Schnittstellen unter Delphi. Hier laufen offensichtlich Dinge im Hintergrund ab, die ich nicht verstehe. Ein Beispiel:

Delphi-Quellcode:
  IMyInterface = interface(IInterface)
  ['{EAB5845A-EB98-4BA4-A36A-CC7092973EA6}']
    function GetString : string;
  end;

  TMyImpl = class(TInterfacedObject, IMyInterface)
  public
    function GetString : string;
  end;

  TMyImpl2 = class(TInterfacedObject, IMyInterface)
  private
    function PrivateString : string;
  public
    function GetString : string;
  end;

{ TMyImpl }

function TMyImpl.GetString: string;
begin
  Result := 'MyImpl';
end;

{ TMyImpl2 }

function TMyImpl2.PrivateString: string;
begin
  Result := ' MyImpl2.PrivateString';
end;

function TMyImpl2.GetString: string;
begin
  Result := 'MyImpl2' + PrivateString;
end;

// Testmethode
procedure TForm1.Button1Click(Sender: TObject);
var MyImpl2 : TMyImpl2;
    IMyIntf : IMyInterface;
begin
  IMyIntf := TMyImpl.Create;
  Label1.Caption := IMyIntf.GetString + ' ' + MyImpl2.GetString;
end;
Nach meinem Verständnis sollte es in der Zeile, in der auf MyImpl2 zugegriffen wird, eine saftige Schutzverletzung geben. Es wird ja schließlich nirgendwo eine Instanz erzeugt. Dem ist aber nicht so (Delphi 7 Prof).
Hat jemand eine Erklärung hierfür?
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Interfaces in Delphi

  Alt 28. Jun 2007, 23:26
Das hat nix mit den Interfaces zu. Du greifst auf eine statische Methode zu. Also gar kein Zugriff auf irgendwelche Instanzenfelder.

EDIT: Und du machst es ja nicht mal per Interface
Du greifst direkt auf die (nicht vorhandene) Instanz zu.

(Da gibts auch Leute, die nen Sport draus machen, Delphi für sowas zu missbrauchen - denn "es knallt ja nicht, und zwar solange, bis...", ja solange, bis virtuelle Moethoden ins Spiel kommen bzw. Instanzenvariablen)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
118 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Interfaces in Delphi

  Alt 28. Jun 2007, 23:31
Statische Methode? Ich hätte gedacht, dass der Zugriff ohne Instanziierung nicht funktionieren dürfte.
Es ist ja keine class function.
Entferne ich die Erstellung der Schnittstelle (Zeile davor) erhalte ich auch korrekterweise eine Schutzverletzung.
Also hat es doch etwas mit dem Interface zu tun - oder?
  Mit Zitat antworten Zitat
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
118 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Interfaces in Delphi

  Alt 28. Jun 2007, 23:32
Es geht mir nicht darum Delphi zu vergewaltigen - ich will nur gern wissen was hinter den Kulissen passiert.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Interfaces in Delphi

  Alt 28. Jun 2007, 23:41
Solange eine Methode keine Felder einer Klasse benötigt oder virtuell ist (und damit erst berechnet werden muss, welche Implementation der Methode angesprungen werden soll) verhalten sich die Methoden wie normale globale Prozedure/Funktionen. Der Methode wird dann zwar ein ungültiger Self-Zeiger übergeben (intern sehen Methoden etwa so aus: "method {TClass.}Foo(Self: TClass; [Parameter])"). Das alles geht so lange gut, bis Felder ("Self.Feld") oder virtuelle Funktionen ("Self.CallVirtual(TClass.Method)") benutzt werden.
  Mit Zitat antworten Zitat
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
118 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Interfaces in Delphi

  Alt 28. Jun 2007, 23:46
Ok - danke. Das stimmt, sobald Felder oder virtuelle Methoden im Spiel sind, gibt es die Schutzverletzung.
Dann hat mich die Interface-Zeile nur auf eine falsche Fährte gelockt.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Interfaces in Delphi

  Alt 29. Jun 2007, 12:40
Zitat von squetk:
Ok - danke. Das stimmt, sobald Felder oder virtuelle Methoden im Spiel sind, gibt es die Schutzverletzung.
Dann hat mich die Interface-Zeile nur auf eine falsche Fährte gelockt.
Genau, Interfaceimplementierungen sind übrigens mucho abstrakto(hey, ich kann spanisch? ), will heißen du musst eine korrekte Instanz haben um es als ein Interface benutzen zu können.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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 06:29 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