委托系列一

 委托是实现回调函数的一种机制

将委托作为参数传递

   class Program
    {
        // 声明委托
        protected delegate void DelegateGreeting(string name);

        protected static void MakeGreeting(string name, DelegateGreeting delegateGreeting)
        {
            delegateGreeting(name);
        }

        protected static void ChineseGreeting(string name)
        {
            Console.WriteLine($"中文打招呼:早上好,{name}");
        }

        protected static void EnglishGreeting(string name)
        {
            Console.WriteLine($"英文打招呼:Morning,{name}");
        }
        static void Main(string[] args)
        {
            MakeGreeting("小明",ChineseGreeting);
            MakeGreeting("xiao ming", EnglishGreeting);
        }
    }

 

显示定义委托

    class Program
    {
        // 声明委托
        protected delegate void DelegateGreeting(string name);

        protected static void MakeGreeting(string name, DelegateGreeting delegateGreeting)
        {
            delegateGreeting(name);
        }

        protected static void ChineseGreeting(string name)
        {
            Console.WriteLine($"中文打招呼:早上好,{name}");
        }

        protected static void EnglishGreeting(string name)
        {
            Console.WriteLine($"英文打招呼:Morning,{name}");
        }
        static void Main(string[] args)
        {
            DelegateGreeting delegate1, delegate2;
            delegate1 = ChineseGreeting;
            delegate2 = EnglishGreeting;
            MakeGreeting("小明", delegate1);
            MakeGreeting("xiao ming", delegate2);
        }
    }

 

多个方法传递给一个委托

class Program
    {
        //定义委托
        protected delegate void DelegateGreeting(string name);
        protected static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning:"+name);
        }
        protected static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好:"+name);
        }
        //将委托作为参数传递
        protected static void Greeting(string name, DelegateGreeting MakeGreeting)
        {
            MakeGreeting(name);
        }
        static void Main(string[] args)
        {
            // 将多个方法同时赋予一个委托
            DelegateGreeting deletage1;
            deletage1 = ChineseGreeting;
            deletage1 += EnglishGreeting;
            Greeting("bradley",deletage1);
            Console.ReadKey();
        }
    }

 取消委托绑定方法

class Program
    {
        //定义委托
        protected delegate void DelegateGreeting(string name);
        protected static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning:"+name);
        }
        protected static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好:"+name);
        }
        //将委托作为参数传递
        protected static void Greeting(string name, DelegateGreeting MakeGreeting)
        {
            MakeGreeting(name);
        }
        static void Main(string[] args)
        {
            DelegateGreeting deletage1 = new DelegateGreeting(ChineseGreeting);
            deletage1 += EnglishGreeting;
            Greeting("bradley",deletage1);
            Console.WriteLine();
            deletage1 -= EnglishGreeting;
            Greeting("bradley", deletage1);
            Console.ReadKey();
        }
    }

 将委托放在类中进行调用

class Program
    {
        public class DelegateManage
        {
            public delegate void DelegateGreeting(string name);
            //将委托作为参数传递
            public  void Greeting(string name, DelegateGreeting MakeGreeting)
            {
                MakeGreeting(name);
            }
        }
        protected static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning:" + name);
        }
        protected static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好:" + name);
        }
        static void Main(string[] args)
        {
            DelegateManage manage = new DelegateManage();
            manage.Greeting("bradley",ChineseGreeting);
            manage.Greeting("bradley",EnglishGreeting);
            Console.ReadKey();
        }
    }

将委托封装到类中,通过"+"号去连接多个委托

class Program
    {
        public delegate void DelegateGreeting(string name);
        public class DelegateManage
        {   
            public DelegateGreeting delegate1;
            public  void Greeting(string name, DelegateGreeting MakeGreeting)
            {
                MakeGreeting(name);
            }
        }
        protected static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning:" + name);
        }
        protected static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好:" + name);
        }
        static void Main(string[] args)
        {
            DelegateManage manage = new DelegateManage();
            manage.delegate1 = EnglishGreeting;
            manage.delegate1 += ChineseGreeting;
            manage.Greeting("bradley", manage.delegate1);
            Console.ReadKey();
        }
    }

将委托封装在类中,通过字段传递


class Program

   {
        public delegate void DelegateGreeting(string name);
        public class DelegateManage
        {   
            public DelegateGreeting delegate1;
            public  void Greeting(string name)
            {
                if (delegate1 != null)
                {
                    delegate1(name);
                }
// 简化写法 delegate1?.Invoke(name); } }
protected static void EnglishGreeting(string name) { Console.WriteLine("Morning:" + name); } protected static void ChineseGreeting(string name) { Console.WriteLine("早上好:" + name); } static void Main(string[] args) { DelegateManage manage = new DelegateManage(); manage.delegate1 = EnglishGreeting; manage.delegate1 += ChineseGreeting; manage.Greeting("bradley"); Console.ReadKey(); } }


委托还有另外一种写法如下:

  DelegateGreeting delegateGreeting = new DelegateGreeting(ChineseGreeting);
  manage.Greeting("bradley", delegateGreeting);

 

 

 

 

 

posted @ 2014-03-19 22:00  bradleydan  阅读(146)  评论(0)    收藏  举报