我现在有一些函数。
如:Login()、SendMessage()、Logout()
我现在要根据一个数值来调用它们:
如:1->Login();2->SendMessage();3->Logout();
这些函数很多,大概有30多个,以后还会有更多,所以不想用switch来做。
请问各位大侠怎么实现。

解决方案 »

  1.   

    switch(Num)
    {
    case 1:
    this.Login();
    break;
    case 2:
    this.SendMessage();
    break;
    ......
    }
      

  2.   

    你看看是否可以用委托数组来实现!不过委托数组有一个限制。那就是所有函数签名必须一样。
    如:Delegate[] FunArray=new Delegate[]{Login,SendMessage,Logout}然后通过:FunArray[0]来调用Login()、FunArray[1]来调用SendMessage()、FunArray[2]来调用Logout()。也可以使用一个HashTable来存储委托,这样做的好处是数值可以不连续!具体的你自己去实现吧!
      

  3.   

    在我的Blog里面有一篇文章就是专门讲这个的,你可以去看看:
    http://wzd24.cnblogs.com
      

  4.   

    System.Collections.Hashtable funcHt = new System.Collections.Hashtable();
            delegate void funcdelegate();
            void ResFunc(funcdelegate func, int i)
            {
                funcHt.Add(i, func);
            }
            void RunFunc(int i)
            {
                funcdelegate func = (funcdelegate)funcHt[i];
                func();
            }
            void Test()
            {
                MessageBox.Show("test");
            }        private void button1_Click(object sender, EventArgs e)
            {
                ResFunc(Test, 1);
                RunFunc(1);
            }
      

  5.   

    要不在xml(或config)文件中配置一下也可以,些个通用读去方法,这样灵活点.
      

  6.   

    同意effun(地瓜)的做法,lz可以使用Dictionary记录(编号,函数名),这样以后如果引入新函数注册注销机制,此结构还可复用
      

  7.   

    用数组搞定了,谢谢wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴)和hthying(C#仔),两位,也谢谢大家。我以前搞C++也是用函数指针数组来实现的,用委托数组比较习惯