private delegate void WT(string s);
 
 private void aa(具体方法)
{
        。//这里的函数都一样 最后调用一个方法要看情况来选择                        
        WT wt = new WT(具体方法);//看情况调用 具体方法
}我要根据后面的情况调用方法,而事先不知道调用哪个方法
所以把方法当做参数传递,具体该如何做呢 ?是不是用委托?

解决方案 »

  1.   

    是的。不过你写的不对。
    传递什么委托方法应该是调用者来决定的。
    应该这么写:delegate void WT(string s);void foo(WT wt)
    {
        common operate
        wt(s);
    }调用
    foo(new WT(MyMethod));...void MyMethod(string s)
    {
        ...
    }
      

  2.   

    如果不用委托,用接口也是可以的,这么写:interface IWT
    {
        void do(string s);
    }
    void foo(IWT wt)
    {
      common operate
      wt.do(s);
    }调用
    foo(new MyWT());...class MyWT : IWT
    {
        public void do(string s)
        {
            ...
        }
    }
      

  3.   

    顺便说下,在C# 3.0(2008)中,这个委托的代码可以压缩成:
    void foo(Action<string> wt)
    {
      common operate
      wt(s);
    }调用
    foo((s) => { what you do in mymethod });对比C# 1.x的写法,不知道要简洁多少。
      

  4.   


    非常感谢 caozhy 给我的回答,很感谢 不但解决了我的疑问 还给我做了深入讲解,比较容易听懂,
    在这之前我更本不懂接口,只听说过 实际运用中 从来不用 或许我目前开发用不到,接口的这个方法貌似比我现在用的委托麻烦点,你教我的这个3.0的方法我明天实际操作看看试着消化掉,还有比如方法返回值不同 参数不同的方法 就不能用委托了吗?