AGB  ·  Datenschutz  ·  Impressum  







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

Mehrfach-Vererbung, .NET und Delphi 8

Ein Thema von sakura · begonnen am 26. Feb 2003 · letzter Beitrag vom 26. Feb 2003
 
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

Mehrfach-Vererbung, .NET und Delphi 8

  Alt 26. Feb 2003, 09: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 W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
 


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 00:15 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