Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Schnittstelle-als-Schnittstelle-Umwandlung

  Alt 3. Jan 2011, 12:11
Delphi-Version: 2010
Eine (generische) Schnittstellenreferenz ist gegeben. Nun möchte ich diese in eine andere generische (!) Schnittstelle umwandeln. Gibt es da eine Möglichkeit? (Der Kompiler sagt nein, leider.)

Delphi-Quellcode:
program Project1;

{$AppType Console}

uses
  SysUtils,
  Classes;

type
  ISchnittstelleA<T> = interface
  end;

  ISchnittstelleB<T> = interface
  end;

  TKlasse<T> = class(TInterfacedObject, ISchnittstelleA<T>, ISchnittstelleB<T>)
  end;

type
  T = String;
var
  O: TInterfacedObject;
  A: ISchnittstelleA<T>;
  B: ISchnittstelleB<T>;
  I: IInterface;
begin
  try
    A := TKlasse<T>.Create;

    { Schnittstelle-als-Schnittstelle-Umwandlungen gehen nicht }
// B := A as ISchnittstelleB<T>;
      // [DCC Fehler]: E2015 Operator ist auf diesen Operandentyp nicht anwendbar

    { und Schnittstelle-als-Objekt-als-Schnittstelle-Umwandlungen gehen nur mit
    "normalen" Schnittstellen, nicht aber mit generischen Schnittstellen. }

    O := A as TInterfacedObject;
    I := O as IInterface;

    { Wie kann man eine Schnittstellenreferenz vom Typ ISchnittstelleB<T>
    erhalten? }

    B := O as ISchnittstelleB<T>;
      // [DCC Fehler]: E2015 Operator ist auf diesen Operandentyp nicht anwendbar

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

  ReadLn;
end.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat