Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#1

Mehrfach-Vererbung, .NET und Delphi 8

  Alt 26. Feb 2003, 10:23
Hi DPler,

die Info, welche jetzt kommt basiert auf einem Artikel von John Kaster und Danny Thorpe (beide Borland) aus dem BDN: http://bdn.borland.com/article/0,1410,29779,00.html

Das letzte Update für den Delphi.NET Preview Compiler stellt uns die Möglchkeit der Mehrfachvererbung von interface-Deklarationen vor. Für Delphi eine absolute Neuheit und aus meiner Sicht ein lang ersehntes und endlich greifbar nahes Feature.
Delphi-Quellcode:
// eine Standard INTERFACE Deklaration in Delphi
type
  IFoo = interface
     procedure Hello;
     procedure Walk;
  end;

  IBar = interface
     procedure Hello;
     procedure Talk;
  end;
Soweit, so gut. Das geht auch schon mit den aktuellen Versionen von Delphi (seit D3).
Delphi-Quellcode:
// jetzt die Neuheit
type
  ICombo = interface(IFoo, IBar)
     procedure ChewBubbleGum;
  end;
Das Interface ICombo erbt jetzt die Deklarationen von beiden Interfaces, IFoo und IBar, ausserdem definiert es noch die Methode ChewBubbleGum (ich möchte den Computer sehen )
Wer sich mit Interfaces schon ein wenig beschäftigt hat, der weiss, das man mit den Deklarationen selbst nicht viel anfangen kann, diese müssen jetzt noch in eine Klasse implementiert werden. Bis einschl. D7 musste man, wenn von mehreren Interfaces geerbt wurde, welche je einen identischen Methodennamen (im Bsp.: Hello;) implementierten diesen auf zwei verschiedene Methoden casten (verteilen). Das ist auch nicht mehr nötig. Folgende Implementierung in eine Klasse ist daher möglich.
Delphi-Quellcode:
  TMyClass = class(TObject, ICombo)
     procedure Hello; // bound to IFoo.Hello and IBar.Hello by default
     procedure Walk;
     procedure Talk;
     procedure ChewBubbleGum;
  end;
Stellen wir uns vor, dass jetzt drei Variablen existieren und wie folgt initialisiert sind.
Delphi-Quellcode:
var
   I: ICombo;
   F: IFoo;
   X: TMyClass;
begin
   X := TMyClass.Create;
   F := X;
   I := X;
X zeigt auf ein Object der Klasse TMyClass. Da die Klasse die beiden Interfaces IFoo und ICombo implementiert, können diese jetzt auf die entsprechenden Variablen (intern Pointer) zugewiesen werden. Da F vom Typ IFoo ist, kann folgender Code problemlos geschrieben werden.
Delphi-Quellcode:
   F.Hello;
   F.Walk;
Für I, vom Typ ICombo gestalltet sich das schon etwas umständlicher. Der Aufruf I.Hello ist nicht mehr eindeutig, da es für den Compiler nicht ersichtlich ist, ob die Methode Hello von IFoo oder IBar gemeint ist. Nach der Delphi-üblichen Manier muss hier also ein Typ-Cast durchgeführt werden.
Delphi-Quellcode:
   I.Hello; // syntax error: ambiguous call (IFoo.Hello and IBar.Hello)
   IBar(I).Hello; // ok
   (I as IBar).Hello; // ok
   I.Walk;
   I.Talk;
   I.ChewBubbleGum;
Voraussichtlich wird die Mehrfachvererbung nur für Interfaces funktionieren, welche von IInterface erben, aber nicht für Interfaces welche von IUnknown erben, um den Einschränkungen von Microsoft (z.B. IInterface und IInterface2) auszuweichen.

Das steht jedoch erst mirt dem Erscheinen von Delphi 8 bzw. der endgültigen Delphi.NET Version fest.

Weitergehende Informationen sind in oben genannten Artikel zu finden. Viel Spass mit der neuen Preview des .NET Compiler für Delphi.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat