Einzelnen Beitrag anzeigen

Panthrax

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

Typumwandlung mit Generika

  Alt 28. Mär 2009, 19:35
Ich habe keine Möglichkeit es zu probieren, interessiere mich aber trotzdem für die Funktionstüchtigkeit folgender Methodenaufrufe:
Delphi-Quellcode:
program Typumwandlung;

{$AppType Console}

uses
  SysUtils,
  Classes;

type
  TGenericClassA<T> = class
    public
    procedure Method1; virtual;
  end;
  TGenericClassB<T> = class(TGenericClassA<T>)
    public
    procedure Method1; override; virtual;
  end;
  TClassA = TGenericClassA<TObject>;
  TClassB = TGenericClassB<TObject>;

procedure TGenericClassA<T>.Method1;
begin
  WriteLn('A: TGenericClassA<T>.Method1 aufgerufen.');
end;

procedure TGenericClassB<T>.Method1;
begin
  WriteLn('B: TGenericClassB<T>.Method1 aufgerufen.');
end;

procedure Test;
var
  B: TClassB;
begin
  B:=TClassB.Create;
  try
    { B }

    WriteLn('B.Method1;');
    B.Method1;

    WriteLn('TClassB(B).Method1;');
    TClassB(B).Method1;

    WriteLn('TGenericClassB<TObject>(B).Method1;');
    TGenericClassB<TObject>(B).Method1;

    WriteLn('(B as TClassB).Method1;');
    (B as TClassB).Method1;

    WriteLn('(B as TGenericClassB<TObject>).Method1;');
    (B as TGenericClassB<TObject>).Method1;

    { A }

    WriteLn('TClassA(B).Method1;');
    TClassA(B).Method1;

    WriteLn('TGenericClassA<TObject>(B).Method1;');
    TGenericClassA<TObject>(B).Method1;

    WriteLn('(B as TClassA).Method1;');
    (B as TClassA).Method1;

    WriteLn('(B as TGenericClassA<TObject>).Method1;');
    (B as TGenericClassA<TObject>).Method1;
  finally
    B.Free;
  end;
end;

begin
  Test;
end.
Kann mir jemand sagen, was da heraus kommt?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat