da Links steht meißtens das, was man hauptsächlich verwendet ... und man muß ja nicht nur ein Delphi in den Pfötchen halten
Zitat von
Panthrax:
Ich hatte gedacht, der Compiler verweigert die Typumwandlung "B as TClassA" mit "Inkompatible Typen".
So reagiert er jedenfalls auf "StringList as TComponent".
B und A sind ja verwandt ... is/as prüft ob die angegebene Klasse sich selber oder ein Vorfahre von sich ist.
TStringList > TStrings > TPersistent > TObject
also nur dieses hier geht
Delphi-Quellcode:
TStringList is TStringList
TStringList is TStrings
TStringList is TPersistent
TStringList is TObject
"TStringList is TComponent" geht nicht, da es kein Vorfahre ist und demnach TStringList keine Eigenschaften von TComponent besitzt.
[add]
andersrum geht nur dieses nicht (ungültige Typumwandlung)
Delphi-Quellcode:
procedure Test;
var
A: TClassA;
begin
A := TClassA.Create;
try
...
WriteLn('(A as TClassB).Method1;');
(A as TClassB).Method1;
WriteLn('(A as TGenericClassB<TObject>).Method1;');
(A as TGenericClassB<TObject>).Method1;
finally
A.Free;
end;
ReadLn;
end;