namespace N01
{
    delegate void MyDelegate(string s);
    class myClass
    {
        public static void hello(string s)
        {
            Console.WriteLine("您好,{0}",s);
        }
        public static void goodbye(string s)
        {
            Console.WriteLine("再见,{0}",s);
        }
    }
    class program
    {
        static void Main(string [] args)
        {
            MyDelegate a,b,c,d;
            a=myClass.hello;
            Console.WriteLine("调用委托变量a:");
            a("a");
            Console.WriteLine("调用委托变量b:");
            b = myClass.goodbye;
            b("b");
            c=a+b;
            Console.WriteLine("调用委托变量c:");
            c("c=a+b");
            d=c-a;
            Console.WriteLine("调用委托变量d:");
            d("d=c-a");
            Console.Read();
        }
    }
}

解决方案 »

  1.   

    delegate是委托的意思,可以理解为 指向方法的指针
    委托返回类型和方法一致,委托的参数也必须和方法一致,参数的个数和类型都必需一致a=myClass.hello就是把MyDelegate的实例指向public static void hello(string s)这个方法然后就可以像直接使用这个方法一样传递参数获得返回值c=a+b;是指同时指向了两个方法,执行的顺序是相加的顺序
    d=c-a; 从c中去除a的指向,这时候的d就等于b
      

  2.   


    using System;
    using System.Collections.Generic;
    using System.Text;namespace N01
    {
        delegate void MyDelegate(string s);
        class myClass
        {
            public static void hello(string s)               //带参数的函数
            {
                Console.WriteLine("您好,{0}", s);                //{}占位符,("您好,{0}{1}", a,b),a给{0}, b给{1}
            }
            public static void goodbye(string s)
            {
                Console.WriteLine("再见,{0}", s);
            }
        }
        class program
        {
            static void Main(string[] args)
            {
                MyDelegate a, b, c, d;
                a = myClass.hello;                              //可理解为引用了hello函数
                Console.WriteLine("调用委托变量a:");
                a("a");                                         //a()=您好,{0}  "a"为赋值
                Console.WriteLine("调用委托变量b:");
                b = myClass.goodbye;
                b("b");
                c = a + b;
                Console.WriteLine("调用委托变量c:");
                c("c=a+b");
                d = c - a;
                Console.WriteLine("调用委托变量d:");
                d("d=c-a");
                Console.Read();
            }
        }
    }
      

  3.   

    调用委托变量a:
    您好,a
    调用委托变量b:
    再见,b
    调用委托变量c:
    您好,c=a+b
    再见,c=a+b
    调用委托变量d
    再见,d=c-a
      

  4.   

    这是委托的使用Demo,楼主需要搞清楚委托的意思,委托可以看作方法的一个抽象,方法是委托的实例
            //定义委托
            delegate void MyDelegate(string s);
            class myClass
            {
                //定义方法1
                public static void hello(string s)
                {
                    Console.WriteLine("您好,{0}", s);
                }
                //定义方法2
                public static void goodbye(string s)
                {
                    Console.WriteLine("再见,{0}", s);
                }
            }
            class program
            {
                static void Main(string[] args)
                {                MyDelegate a, b, c, d; //定义委托变量
                    a = myClass.hello;//实例化委托a,执行myclass的hello方法
                    Console.WriteLine("调用委托变量a:");
                    a("a");//执行myClass.hello方法
                    Console.WriteLine("调用委托变量b:");
                    b = myClass.goodbye;
                    b("b");
                    c = a + b;//实例化委托c,执行a = myClass.hello和myClass.goodbye方法
                    Console.WriteLine("调用委托变量c:");
                    c("c=a+b");
                    d = c - a;//实例化委托d,执行myClass.goodbye方法
                    Console.WriteLine("调用委托变量d:");
                    d("d=c-a");
                    Console.Read();
                }
            }
      

  5.   

    class Class1
        {
            //定义一个委托
            delegate void MyDelegate(string s);
            class myClass
            {
                public static void hello(string s)
                {
                    Console.WriteLine("您好,{0}", s);
                }
                public static void goodbye(string s)
                {
                    Console.WriteLine("再见,{0}", s);
                }
            }
            class program
            {
                static void Main(string[] args)
                {
                    //创建该委托对象
                    MyDelegate a, b, c, d;
                    //把hello方法作为参数委托给Mydelegate,此方法的参数必须和委托的参数是一直的
                    //以下同理
                    a = myClass.hello;
                    Console.WriteLine("调用委托变量a:");
                    //调用了该委托。执行的是hello方法
                    a("a");
                    Console.WriteLine("调用委托变量b:");
                    b = myClass.goodbye;
                    b("b");
                    c = a + b;
                    Console.WriteLine("调用委托变量c:");
                    c("c=a+b");
                    d = c - a;
                    Console.WriteLine("调用委托变量d:");
                    d("d=c-a");
                    Console.Read();
                }
            }
        }
      

  6.   

    class Class1
        {
            //定义一个委托
            delegate void MyDelegate(string s);
            class myClass
            {
                public static void hello(string s)
                {
                    Console.WriteLine("您好,{0}", s);
                }
                public static void goodbye(string s)
                {
                    Console.WriteLine("再见,{0}", s);
                }
            }
            class program
            {
                static void Main(string[] args)
                {
                    //创建该委托对象
                    MyDelegate a, b, c, d;
                    //把hello方法作为参数委托给Mydelegate,此方法的参数必须和委托的参数是一直的
                    //以下同理
                    a = myClass.hello;
                    Console.WriteLine("调用委托变量a:");
                    //调用了该委托。执行的是hello方法
                    a("a");
                    Console.WriteLine("调用委托变量b:");
                    b = myClass.goodbye;
                    b("b");
                    c = a + b;
                    Console.WriteLine("调用委托变量c:");
                    c("c=a+b");
                    d = c - a;
                    Console.WriteLine("调用委托变量d:");
                    d("d=c-a");
                    Console.Read();
                }
            }
        }