public class work
    {        /// <summary>
        /// 参数为方法
        /// </summary>
        /// <param name="doit">
        /// 1、这里参数是方法
        /// 2、方法的参数不固定
        /// </param>
        public void Work(void doit())
        {
             doit();
        }

解决方案 »

  1.   

    public void Work(Action doit)参数方法的参数由委托定义决定,和Work无关...Action<>委托可以支持0-16个参数...
      

  2.   


    using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 创建一个委托实例,封装C类的静态方法M1
                MyDelegate d1 = new MyDelegate(C.M1);
                d1("D1"); // M1            // 创建一个委托实例,封装C类的静态方法M2
                MyDelegate d2 = new MyDelegate(C.M2);
                d2("D2"); // M2            // 创建一个委托实例,封装C类的实例方法M3
                MyDelegate d3 = new MyDelegate(new C().M3);
                d3("D3"); // M3            // 从一个委托d3创建一个委托实例
                MyDelegate d4 = new MyDelegate(d3);
                d4("D4"); // M3            // 组合两个委托
                MyDelegate d5 = d1 + d2;
                d5 += d3;
                d5("D5"); // M1,M2,M3            // 从组合委托中删除d3
                MyDelegate d6 = d5 - d3;
                d6("D6"); // M1,M2
                d6 -= d3; // 虽然d6调用列表中已经没有d3了,但这样只是不可能的移除没有错误发生
                d6("D6"); // M1,M2
                d6 -= d6;
                //d6("D6"); 此时d6的调用列表为空,d6为null,所以引发System.NullReferenceException            MyDelegate d7 = new MyDelegate(C1.P1);
                d7("D7"); // C1.P1            MyDelegate d8 = new MyDelegate(new C2().P1);
                d8("D8"); // C2.P1        }
        }    // 声明一个委托MyDelegate
        public delegate void MyDelegate(string str);    public class C
        {
            public static void M1(string str)
            {
                Console.WriteLine("From:C.M1:   {0}", str);
            }        public static void M2(string str)
            {
                Console.WriteLine("From:C.M2:   {0}", str);
            }        public void M3(string str)
            {
                Console.WriteLine("From:C.M3:   {0}", str);
            }
        }    public class C1
        {
            public static void P1(string str)
            {
                Console.WriteLine("From:C1.P1:   {0}", str);
            }
        }    public class C2
        {
            public void P1(string str)
            {
                Console.WriteLine("From:C2.P1:   {0}", str);
            }
        }   
    }
      

  3.   

    这个有个弊端
    就是要把MyDelegate只能传递string的参数,
    如果参数改变的话
    还得重写代码
    效率不是太高