当前位置:首页 » .NET编程经验 » 正文

通俗易懂的委托实例

2016年3月24日 11:34:47  分类: .NET编程经验  参与: 人  点这评论

    

委托是什么?

    委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。即它可以在其他需要用到它的地方间接调用它,使得它使用起来更加方便灵活。

    委托也可以理解为类似接口的一个东西,在定义它的类中只需要声明它,而不用去实现具体操作,因为实现可以写在调用它的类中。

    实例:

public class DelegateDemo
    {
        /// <summary>
        /// 声明委托
        /// </summary>
        public delegate void DlgStartWork();
        /// <summary>
        /// 委托实例
        /// </summary>
        public DlgStartWork DelegateStartWork = null;
        /// <summary>
        /// 工作
        /// </summary>
        public void Do()
        {
            if (DelegateStartWork == null)
            {
                Console.WriteLine("要想我工作,请先给我分配任务!");
                return;
            }
            DelegateStartWork.BeginInvoke(new AsyncCallback(CallBack), null);//最后这个参数主要用来标记调用者的一些信息,没有可传null
        }
        /// <summary>
        /// 回调函数(当执行到这,说明已经开始工作了)
        /// </summary>
        /// <param name="asyncResult"></param>
        private void CallBack(IAsyncResult asyncResult)
        {
            DelegateStartWork.EndInvoke(asyncResult);
        }
    }
    
    
/// <summary>
/// 主程序
/// </summary>
class Program
    {
        //定义委托的类,先实例化它
        private static DelegateDemo demo = new DelegateDemo();
        /// <summary>
        /// 入口函数
        /// </summary>
        static void Main(string[] args)
        {
            Console.WriteLine("在干嘛!!还不赶快去工作!!");
            demo.Do();//未分配任务,无法工作
            ManageWork();//老板分配任务
            demo.Do();//收到任务开始工作
            
            Console.ReadKey();
        }
        
        /// <summary>
        /// 老板分配工作
        /// </summary>
        public static void ManageWork()
        {
            Console.WriteLine("开始分配任务...");
            demo.DelegateStartWork = new DelegateDemo.DlgStartWork(StartWork);//还可以使用+=操作符,实现多播(即Observer模式)
            Thread.Sleep(3 * 1000);
            Console.WriteLine("完成任务分配!");
            Thread.Sleep(3 * 1000);
        }
        /// <summary>
        /// 收到任务开始工作
        /// </summary>
        public static void StartWork() 
        {
            Console.WriteLine("哈哈,收到工作任务,开始工作!");
        }
    }


    

来源:时间去哪儿了博客(微信/QQ号:903918446),转载请保留出处和链接!

本文链接:http://timegowhere.com/post/delegate.html

本文标签:delegate    

<< 上一篇下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

相关文章

    搜索

    网站分类

    Tags列表

    最新留言

    微信公众号【双语悦读】

      【个人微信】

    站点地图 | 网站标签 | 给我留言

    Copyright © 2014-2016 timegowhere.com. All rights reserved. 粤ICP备15081222号