testgenericconstraints.out

来自「格式化源码的最新板」· OUT 代码 · 共 97 行

OUT
97
字号
program testgenericconstraints;{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes;

type
  couleurs = (rouge, noir, vert);

  imoninterface = interface
    procedure faitqqchose;
  end;

  tclassemoninterface = class(TObject, IMonInterface)
    procedure faitqqchose;
  end;
  tenregistrement = record
  end;

  tgenericenregistrement<t> = record
    Data: t;
  end;

  tgenericclass<r:record> = class
    champ: r;
  end;

  tgenericrecord<c:class> = record
    maclasse: c;
  end;

  tgenericclass2<c:class> = class
    valeur: c;
  end;

  tgenericrecord2<c:TList> = record
    maclasse: c;
  end;

  tgenericrecord3<c:class,
constructor> = record
    maclasse: c;
  end;

  tgenericclass3<u:tgenericclass<tenregistrement>> = class
    enregistrementun: u;
  end;

  tgenericclass4<u:tgenericclass<tenregistrement>> = class
    enregistrementun:    u;
    enregistrementdeux:  tgenericrecord<TObject>;
    enregistrementtrois: tgenericrecord<tgenericclass<tenregistrement>>;
  end;

  tclasscontraintetypenu<t,u> = class
    type tclassimbriquee<s:u> = class
      valeur: s;
    end;
  end;

  procedure tclassemoninterface.faitqqchose;
  begin
    writeln('Dans la proc閐ure d''interface FaitqqChose');
  end;

var
  rec:     tgenericrecord<TObject>;
  objintf: tgenericclass2<imoninterface>;
  obj2:    tgenericclass2<TObject>;
  obj3:    tgenericclass2<string>;
  obj4:    tgenericclass2<array of integer>;
  obj5:    tgenericclass<tenregistrement>;
  obj6:    tgenericclass<integer>;
  obj7:    tgenericclass<couleurs>;
  parent:  tclasscontraintetypenu<string,integer>;
  naked:   TObject;
begin
  try
    rec.maclasse := TObject.Create;
    objintf      := tgenericclass2<imoninterface>.Create;
    objintf.valeur := tclassemoninterface.Create;
    imoninterface(objintf.valeur).faitqqchose;
    obj2   := tgenericclass2<TObject>.Create;
    obj2.valeur := nil;
    obj2.valeur := TObject.Create;
    obj3   := tgenericclass2<string>.Create;
    obj3.valeur := 'Toto';
    parent := tclasscontraintetypenu<string,integer>.Create;
    naked  :=
      tclasscontraintetypenu<string,integer>.tclassimbriquee<string>.Create;
  except
    on e: Exception do
      writeln(e.ClassName, ': ', e.message);
  end;
  readln;
end.
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?