程序猿改变世界
委托是什么?
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。即它可以在其他需要用到它的地方间接调用它,使得它使用起来更加方便灵活。
委托也可以理解为类似接口的一个东西,在定义它的类中只需要声明它,而不用去实现具体操作,因为实现可以写在调用它的类中。
实例:
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
【个人微信】
【时间去哪儿了】
教育类博客,关注知识的分享与交流。
欢迎关注公众号!
加我微信
Copyright © 2014-2016 timegowhere.com. All rights reserved. 粤ICP备15081222号