回 帖 发 新 帖 刷新版面

主题:[讨论]求教:C#中怎么将函数名当作参数传入?(貌似Delegate解决不了我的需求)

int s=0;
...
...
//有26个事件Event_(A-Z),过程形式完全一样。另有26个函数Function_(A-Z),各函数功能完全不一样:

Event_A
{
    if(s==1)
        {Function_A(x1);}
    else
        {Function_A(x2);}
}

Event_B
{
    if(s==1)
        {Function_B(x1);}
    else
        {Function_B(x2);}
}

……
……

Event_Z
{
    if(s==1)
        {Function_Z(x1);}
    else
        {Function_Z(x2);}
}


==========================================================================

以上26个事件对应的过程都是一样的,但是每个过程都这么写一遍太麻烦了,请问怎么将每个过程抽象成一个过程函数Process,将Function_A-Z当作参数名传入?

比如:
Event_A
{
    Process(Function_A);    
}

回复列表 (共2个回复)

沙发

没明白这是什么意思,为何同一函数会有这么多不同时机?

板凳

好像不行啊,
delegate作用就好像函数指针,函数名也就想函数指针;既然有了delegate,就没必要吧函数名作为函数指针了吧,所以只要delegate就行了。

看来楼主说的那几个函数的参数和返回都一样吧,用一个delegate类型创建24个delegate,需要的时候作为参数传入process函数,delegate是可以作为参数使用的。
更巧妙地做法是:在包含这24个函数的类中声明一个适合delegate这些函数的delegate类型,然后添加24个property,每个property返回使用对应的函数创建的delegate。将这个property作为参数就是好方法。

如果我说的不清楚请参考Programming C#  第12章

我来回复

您尚未登录,请登录后再回复。点此登录或注册