我有很多个函数,函数命名很有规律,如func1,func2,func3........;现在我想依据某个参数,分别调用不同的函数,比如传入1,就调用func1,传入2就调用func2,  代码如下:
procedure DO(i:integer)
begin
  case i of
    1:func1;
    2:func2;
    3:func3;
    .........
end;如果func函数很多的话,,case就要把i的值统统都罗列出来,有没有比较简洁的方法?

解决方案 »

  1.   

    建数组
    procedure x1;
    begin
      ShowMessage('1');
    end;procedure x2;
    begin
      ShowMessage('2');
    end;var
      x: array [0..1] of procedure = (x1,x2);procedure DO(i:integer)
    begin
      x[i];
    end;
    越界问题自己判断。
      

  2.   

    procedure fun1;
    begin
      showmessage('1');
    end;procedure fun2;
    begin
      showmessage('2');
    end;procedure fun3;
    begin
      showmessage('3');
    end;var
      l: TList;procedure DOIt(i:integer);
    begin
      TProcedure(l[i-1])
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      l:=TList.Create;
      l.Add(@fun1);
      l.Add(@fun2);
      l.Add(@fun3);end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      l.Free;
    end;procedure TForm1.FormClick(Sender: TObject);
    begin
      DoIt(2);
    end;
      

  3.   

    在 case  of 中直接执行就好了, 莫非在case中无法完成的事??
      

  4.   

    通过这种方法调用的方法数量不多的话   1,2楼的方法就行如果数量多可以写个通用函数:
      通过rtti单元获取方法列表, 通过与输入字符匹配获得适用的方法