⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testgenericfunctions.out

📁 格式化源码的最新板
💻 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 + -