Registriert seit: 18. Feb 2005
286 Beiträge
Delphi 2010 Enterprise
|
Typumwandlung mit Generika
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."
|