知道一个函数的名字 比如"Foo1",是string类型的。现在我要用这个string类型的函数名"Foo1",调用同名的函数Foo1();在C#中如何实现这个功能?? 如果是类型的话还好实现可以用Activator或者Assembly,不知道这两者能否用在函数上。有没有好的方法,麻烦高手给出简单的示例代码。不然我就只能用最笨的判断方法了。
switch(fooname)
{
 case "Foo1":
       Foo1();
 break;
 case "Foo2":
       Foo2();
 break;
 ......
}

解决方案 »

  1.   

    你用的那个switch已经是个好方法了!
      

  2.   

    switch挺好的  速度快
    工厂模式, 那得分多少个类
    反射也行 速度上就慢过switch了
      

  3.   

    反射可以,但性能损耗上可比你用switch大得多,只是代码看上去比较简洁,少写部分代码而已
    需要反射的例子吗?
      

  4.   

    如果不是变动太大的用Switch就很好,反射用起来麻烦.如果要实现代码级的动态处理,用System.CodeDom功能更强大。
      

  5.   

    获取类型的Type,执行invoke,方法名称作为参数
      

  6.   


    using System.Reflection;            Type t = this.GetType();
                MethodInfo mi = t.GetMethod(fooname, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
                if (mi != null)
                    mi.Invoke(this, null);由于不知道你具体的函数定义,以上代码仅供参考
      

  7.   

    好了。看来我只能用switch...case的方式了。因为我这还有些复杂。我是要将函数添加到按钮事件上面。
    btn.click+=new eventhandler(Foo1());
      

  8.   

    作为一种结构化的代码生成技术,CodeDom有着无限的潜能,唯一的约束恐怕在于人们的想象力。
    参考