c#委托把方法当成参数

 //定义委托,它定义了可以代表的方法的类型
        public delegate void GreetingDelegate(string name);

        /// <summary>
        /// 用英文打招呼
        /// </summary>
        /// <param name="name"></param>

        private void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning, " + name);
        }

        /// <summary>
        /// 用中文打招呼
        /// </summary>
        /// <param name="name"></param>

        private void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好, " + name);
        }

        //注意此方法,它接受一个GreetingDelegate类型的方法作为参数
        /// <summary>
        /// 委托(代理的方法)
        /// </summary>
        /// <param name="name"></param>
        /// <param name="markGreeting"></param>

        private void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Delegate方式一:
            //GreetPeople("Jimmy Zhang", EnglishGreeting);
            //GreetPeople("张子阳", ChineseGreeting);
            //Console.ReadKey();

            //Action方式二:
            GreetPeopleAction("Jimmy Zhang", (s) =>
            {
                Console.WriteLine("Morning, " + s);
            });

            GreetPeopleAction("张子阳", (s) =>
            {
                Console.WriteLine("早少好, " + s);
            });

            Console.ReadKey();
        }

        /// <summary>
        /// Action委托作为参数
        /// </summary>
        /// <param name="name"></param>
        /// <param name="action"></param>
        public void GreetPeopleAction(string name, Action<string> action)
        {
            action(name);
        }

 

posted @ 2014-12-29 16:18  跟着阿笨一起玩.NET  阅读(1080)  评论(0编辑  收藏  举报