读书人

这种情况上该如何做

发布时间: 2013-01-05 15:20:40 作者: rapoo

这种情况下,该怎么做?
我有很多个函数,函数命名很有规律,如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的值统统都罗列出来,有没有比较简洁的方法?
[解决办法]
建数组

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;

越界问题自己判断。
[解决办法]
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;

[解决办法]
楼上两位都是牛人,学习了!
[解决办法]
在 case??of 中直接执行就好了, 莫非在case中无法完成的事??
[解决办法]
向两位牛人学习,增见识了
[解决办法]
通过这种方法调用的方法数量不多的话 1,2楼的方法就行

如果数量多可以写个通用函数:
通过rtti单元获取方法列表, 通过与输入字符匹配获得适用的方法

读书人网 >.NET

热点推荐