我有这样的代码:

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;


问题出在过程中当我想将参数放入fOnMsgFromServer时执行。 “助手”告诉我(Arg1:字符串; Arg2:字符串; Arg3:字符串),而我只是不知道哪个参数是哪个。

有什么解决办法可以命名此参数?

最佳答案

如果使用通用TProc<T1,T2,T3>类型,则无法避免使用这些通用名称。其声明如下所示:

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


如您所见,这就是名称的来源。如果使用此类型,那么您将被这些名称所困扰。

相反,您应该声明一个定制的引用过程类型,而不是使用泛型类型。这不仅可以让您为参数赋予有意义的名称,还可以让您停止一遍又一遍地重复自己。

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

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

10-02 11:32
查看更多