3 votes

Nommage des types génériques

J'ai un code comme celui-ci :

TServer = class
private
    fOnMsgFromServer: TProc<String, String, String>;
public
    procedure RegisterOnMsgFromServer(aCallBack: TProc<String, String, String>);
    procedure Execute;
end;

procedure TServer.RegisterOnMsgFromServer(aCallBack: TProc<String, String, String>);
begin
    fOnMsgFromServer := aCallBack;
end;

procedure TServer.Execute;
begin
    fOnMsgFromServer('userName', 'password', 'message');
end;

Le problème est dans la procédure Execute lorsque je veux mettre des arguments à fOnMsgFromServer. L'"helper" me montre (Arg1 : string ; Arg2 : string ; Arg3 : string), et je ne sais pas quel paramètre est le bon.

Il existe une solution pour nommer ces arguments ?

7voto

David Heffernan Points 292687

Vous ne pouvez pas éviter ces noms génériques si vous utilisez le générique TProc<T1,T2,T3> type. Sa déclaration ressemble à ceci :

type
  TProc<T1,T2,T3> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3);

Comme vous pouvez le constater, c'est de là que viennent les noms. Si vous utilisez ce type, vous êtes coincé avec ces noms.

Vous devez plutôt déclarer un type de procédure de référence sur mesure plutôt que d'utiliser le type générique. Cela vous permettra non seulement de donner des noms significatifs aux arguments, mais aussi d'éviter de vous répéter sans cesse.

type
  TMsgFromServerProc = reference to procedure(UserName, Password, Msg: string);

  TServer = class
  private
    fOnMsgFromServer: TMsgFromServerProc;
  public
    procedure RegisterOnMsgFromServer(aCallBack: TMsgFromServerProc);
  end;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X