e.temperature);}} class Shower{ public static void showtemp(

时间:2021-08-17 06:51:45

看了张子阳博客后,,总结了一下小我私家的理解,原文见:

委托是可以把要领作为参数的一种东东。

把委托声明成与要领的返回值和参数一模一样。

然后把要领赋值给委托变量,委托变量就可以作为参数带入函数。

委托最主要的感化是实现C#中的事件。

C#中的委托型事件需要遵守几个书写规范:

1、委托名称必需以EventHandler结尾。如:PlayEventHandler

2、委托必需声明成两个参数且void,一个Object型的sender参数代表东西自己,一个EventArgs型的参数(或者担任自
EventArgs类)。如:PlayEventHandler(Object sender,EventArgs e)

3、事件变量名称就是委托名称去失EventHandler后的前面部分。如:Play

4、需要写一个要领以On开始以事件变量名称结束,要领中判断时间变量是否为null,不为null则执行事件。如:OnPlay

5、该要领包罗一个参数即委托的第二个参数EventArgs。执行事件参数为委托的两个参数。

6、担任EventArgs类的名称要以EventArgs结尾。

附上实例,改削自张子阳博客

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace firewater { class Program { static void Main(string[] args) { heater ht = new heater(); Alerter at = new Alerter(); ht.Boiled += at.MakeAlert; ht.Boiled += Shower.showtemp; ht.BoilWater(); Console.ReadKey(); } } class heater { private int temperature; public string area = "重庆"; public string type = "日晓101"; public class BoiledEventArgs : EventArgs { public readonly int temperature; public BoiledEventArgs(int temperature) { this.temperature = temperature; } } public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e); //声明委托 public event BoiledEventHandler Boiled; //声明委托型事件 protected virtual void OnBoiled(BoiledEventArgs e) { if(Boiled!=null) { Boiled(this,e); } } public void BoilWater() { for (int i = 0; i <= 100; i++) { temperature = i; if (i > 95) { BoiledEventArgs e = new BoiledEventArgs(temperature); OnBoiled(e); } } } } class Alerter { public void MakeAlert(Object sender,heater.BoiledEventArgs e) { heater ht=(heater)sender; Console.WriteLine("水壶型号{0}", ht.type); Console.WriteLine("水壶产地{0}", ht.area); Console.WriteLine("嘀嘀嘀...水快开了!水温是{0}",e.temperature); } } class Shower { public static void showtemp(Object sender, heater.BoiledEventArgs e) { heater ht = (heater)sender; Console.WriteLine("水壶型号{0}", ht.type); Console.WriteLine("水壶产地{0}", ht.area); Console.WriteLine("当前水温:{0}", e.temperature); } } }