📄 testgenericoperatoras.out
字号:
program TestGenericOperatorAs;
{$APPTYPE CONSOLE}
{ AFS December 2007
This code compiles, but is not semantically meaningfull.
It is test cases for the code-formating utility
Test new generics syntax - code from TridenT
}
uses
SysUtils;
type
MaClasse = class
function Contraint<X:
class>(AValue: TObject): X;
function NonContraint<X>(AValue: TObject): X;
procedure Test;
end;
function MaClasse.Contraint<X>(AValue: TObject): X;
begin
Result := AValue as X;
end;
function MaClasse.NonContraint<X>(AValue: TObject): X;
begin
Result := AValue as X;
end;
procedure MaClasse.Test;
var
Resultat: TObject;
Str: string;
Int: integer;
begin
Resultat := TObject.Create;
Writeln('Classe de Resultat = ', Resultat.ClassName);
Resultat := Contraint<TObject>(Str); // Si Nil, Resulat = Nil
Resultat := NonContraint<TObject>(Str); // Si Nil, Resulat = Nil
Writeln('Resultat = Nil');
try
//Int:=Contraint<Integer>(Str); //E2511 Le param鑤re type 'X' doit 阾re un type de classe
Int := NonContraint<integer>(Str); //NullReferenceException:
except
on E: NullReferenceException do ;
end;
Str := 'Test'; //Intanciation de Str
Resultat := TObject.Create;
Writeln('Classe de Resultat = ', Resultat.ClassName); //Resultat = TObject
Resultat := Contraint<TObject>(Str); //Ok
Writeln('Classe de Resultat = ', Resultat.ClassName); //Resultat = TString;
Resultat := NonContraint<TObject>(Str); //Ok
try
Int := NonContraint<integer>(Str); //InvalidCastException
except
on E: InvalidCastException do ;
end;
end;
var
Classe: MaClasse;
begin
Classe := MaClasse.Create;
try
Classe.Test;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -