泛型类型命名

aQu*_*Quu 3 delphi generics naming-conventions

我有这样的代码:

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;
Run Code Online (Sandbox Code Playgroud)

问题在于程序执行当我想把参数放到fOnMsgFromServer时."helper"显示我(Arg1:string; Arg2:string; Arg3:string),我只是不知道哪个参数是哪个.

有没有解决方案来命名这个论点?

Dav*_*nan 7

如果使用泛型TProc<T1,T2,T3>类型,则无法避免这些通用名称.它的声明如下:

type
  TProc<T1,T2,T3> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3);
Run Code Online (Sandbox Code Playgroud)

如您所见,这就是名称的起源.如果使用此类型,则会遇到这些名称.

相反,您应该声明一个定制的引用过程类型,而不是使用泛型类型.这不仅可以让你为论证传授有意义的名字,还可以让你不停地重复自我.

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

  TServer = class
  private
    fOnMsgFromServer: TMsgFromServerProc;
  public
    procedure RegisterOnMsgFromServer(aCallBack: TMsgFromServerProc);
  end;
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这是一种类型而不是程序.所以参数是类型而不是参数.在任何情况下,类型都有有意义的占位符名称.那种类型是`TDictionary <TKey,TValue>`.然后方法利用了这一点.例如,`procedure Add(const Key:TKey; const Value:TValue);`但无论如何,这与你在这里提出的问题完全不同. (2认同)