📄 testgenericfunctions.out
字号:
program TestGenericFunctions;
{$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
TProcedureGenerique<A> = procedure(Param1: A);
TProcObjetGenerique<B> = procedure(X, Y: B) of object;
TFonctionGenerique<T> = function: T;
TMaClasse = class
procedure UneMethode<T>(X, Y: T);
// M阭e signature que le type TProcObjetGenerique<B>
procedure TestMethode;
procedure TestProcedure<UnType>(Prc: TProcedureGenerique<UnType>);
procedure TestFonction<T>(fnct: TFonctionGenerique<T>);
end;
//Procedure ProcedureGenerique<A>(M:A); //E2530 Les param鑤res de type ne sont pas autoris閟 sur la fonction ou la proc閐ure globale
procedure ProcedureGeneriqueInt(M: integer);
begin
Writeln(M);
end;
procedure ProcedureGeneriqueString(M: string);
begin
Writeln(M);
end;
function UneFonctionGeneriqueInt: integer;
var
S: string;
begin
Result := 10;
end;
{On ne peux pas utiliser de type construit ouvert dans un type procedure
procedure TestTypeProcedure<A>(Arg:TMaClasse); -> E2530 Les param鑤res de type ne sont pas autoris閟 sur la fonction ou la proc閐ure globale
}
procedure TestTypeProcedure(Arg: TMaClasse);
var
P: TProcObjetGenerique<string>;
P2: TProcObjetGenerique<integer>;
//Pn : TProcObjetGenerique<...
begin
P := Arg.UneMethode<string>;
P('Hello', 'World');
//P:=Arg.UneMethode<Integer>; //E2010 Types incompatibles : 'string' et 'Integer'
P2 := Arg.UneMethode<integer>;
P2(10, 20);
end;
{TMaClasse}
procedure TMaClasse.UneMethode<T>(X, Y: T);
begin
Writeln(X.ToString, ' , ', Y.ToString);
end;
procedure TMaClasse.TestMethode;
var
P: TProcObjetGenerique<boolean>;
begin
//On d閠ermine le type dans le corps de la m閠hode. La signature est donc connue.
UneMethode<string>('Hello', 'World');
UneMethode('Hello', 'World');
UneMethode<integer>(10, 20);
UneMethode(10, 20);
P := UneMethode<boolean>;
P(False, True);
end;
procedure TMaClasse.TestProcedure<UnType>(Prc: TProcedureGenerique<UnType>);
var
P: TProcedureGenerique<UnType>;
Value: UnType;
begin
//Le type est d閠ermin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -