static void Main(string[] args) { CustomerManager customerManager = new CustomerManager(); Mydelegate myDelegate = customerManager.SendMessage; myDelegate += customerManager.ShowAlert; Mydelegate2 mydelegate2 = customerManager.SendMessage; //ard arda çalışmasını istediğin metotlar grubu için delegate'leri kullanabilirsiniz.Örneğin bir yemek //yapmak için sırasıyla yapılan işlemleri bir metot olarak tanımlayıp hepsini delegate değişkenine atarsak //sadece delegate metotunu çağırmamız yeterli olacaktır. DortIslem dortIslem = new DortIslem(); Mydelegate3 mydelegate3 = dortIslem.Carp; mydelegate3 += dortIslem.Topla; myDelegate(); mydelegate2("Selamunaleyküm"); mydelegate3(2, 4); Console.Read(); }
static void MyCallBack(IAsyncResult ar) //ar是意思是判断是否执行完毕 { //回调函数先把 IAsyncResult转化为 AsyncResult类型 ,方便后面调用 AsyncResult result = ar as AsyncResult; //获取当前 被调用的委托 m3 Mydelegate3 currentDelegate = result.AsyncDelegate as Mydelegate3; //获取异步委托m3 获取的返回值 int sum = currentDelegate.EndInvoke(ar); Console.WriteLine("总和是{0}", sum); }
static void Main(string[] args) { //#region 调用 无参数,无返回值的委托 ////实例化一个委托 //MyDelegate1 m1 = new MyDelegate1(T1); //IAsyncResult result= m1.BeginInvoke(null,null);///直接调用异步委托 ////等待异步委托调用结束后,再继续后面的代码。 ////这里使用EndInvoke() //m1.EndInvoke(result); //Console.WriteLine("OK"); //Console.ReadKey(); //#endregion //#region 调用有参数、无返回值的委托 //MyDelegate2 m2 = new MyDelegate2(T2); //IAsyncResult result= m2.BeginInvoke(1, 2,null,null); //开始异步委托调用 ////执行异步委托结束后,才执行后面的代码 //m2.EndInvoke(result); //线程阻塞,等待异步委托的调用的结束 //Console.WriteLine("ok"); //Console.ReadKey(); //#endregion #region 参数,有返回值 的委托, 所以需要回调函数 //实例化这个 委托 Mydelegate3 m3 = new Mydelegate3(T3); //开始异步调用委托 IAsyncResult result = m3.BeginInvoke(1, 5, new AsyncCallback(MyCallBack), null); // AsyncCallback 是一个有参数无返回值的委托 //所以定义的 Mycallback方法 也需要是 有参数 无返回值。 //方法 又需要 和委托的 参数类型一致,所以方法 的参数也需要 MyCallBack类型 Console.WriteLine("异步委托调用开始了"); Console.ReadKey(); #endregion }
public static Mydelegat1 Method(Mydelegate2 mydelegate2, Mydelegate3 mydelegate3) { return(delegate { return mydelegate2.Invoke() + mydelegate3.Invoke(); }); }