委托和事件

委托delegate就是一个类,它定义了方法的类型,可以把方法当做参数来进行传递,可以把多个方法绑定到一个委托,加绑+=,解绑-=

事件event基于委托,为委托定义了一个订阅/发布机制,事件类似于对委托类型的变量进行了封装,

1.委托类型的名称都应该以EventHandler结束2.事件的命名为去掉EventHandlers之后剩余的部分3.委托的原型定义有2个参数4.继承自EventArgs应该以EventArgs结尾


//class Delegate
//{
// public class Heater
// {
// private int temperature;
// public void BoilWater() {

// for (int i = 0; i <= 100; i++)
// {
// temperature = i;
// if (temperature > 95) {
// MakeAlert(temperature);
// Showmsg(temperature);
// }
// }
// }
// public void MakeAlert(int param)
// {
// Console.WriteLine("alarm:水已经烧开了{0}度", param);
// }
// public void Showmsg(int param)
// {
// Console.WriteLine("display:水快开了{0}度", param);
// }

// }
// class test
// {
// static void Main(string[] args)
// {
// Heater ht = new Heater();
// ht.BoilWater();
// Console.Read();
// }
// }
//}


//Obsever设计模式
//public class Heater{
// public delegate void BoilHandler(int param);
// private int temperature;
// public event BoilHandler BoilEvent;
// public void BoilWater() {
// for (int i = 0; i <= 100; i++) {
// temperature = i;
// if (temperature > 95) {
// BoilEvent?.Invoke(temperature);
// }
// }
// }
//}
//public class Alarm {
// public void MakeAlert(int param) {
// Console.WriteLine("ddd,水已经烧开到{0}度",param);
// }
//}
//public class Display {
// public static void Showmsg(int param) {
// Console.WriteLine("当前水温{0}度",param);
// }
//}
//class test {
// static void Main() {
// Heater ht = new Heater();
// Alarm al = new Alarm();
// ht.BoilEvent += al.MakeAlert;
// ht.BoilEvent += Display.Showmsg;
// ht.BoilWater();
// Console.Read();
// }
//}

//public class Heater
//{
// private int temperature;
// public string type = "RealFire 001";
// public string area = "China Xian";
// public delegate void BoiledEventHandler(Object sender,BoiledEventArgs e);
// public event BoiledEventHandler Boiled;
// public class BoiledEventArgs : EventArgs
// {
// public readonly int temperature;
// public BoiledEventArgs(int temperature) {
// this.temperature = temperature;
// }
// }
// 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 (temperature > 95)
// {
// BoiledEventArgs e = new BoiledEventArgs(temperature);
// OnBoiled(e);
// }
// }
// }
// public class Alarm
// {
// public void MakeAlert(object sender,Heater.BoiledEventArgs e)
// {
// Heater heater = (Heater)sender;
// Console.WriteLine("alarm:{0},{1}",heater.type,heater.area);
// Console.WriteLine("alram:嘀嘀,水已经{0}度",e.temperature);
// Console.WriteLine();
// }

// }
// public class Display
// {
// public static void Showmsg(object sender, Heater.BoiledEventArgs e)
// {
// Heater heater = (Heater)sender;
// Console.WriteLine("display{0}{1}", heater.type, heater.area);
// Console.WriteLine("display:水快烧开了,当前温度:{0}", e.temperature);
// Console.WriteLine();
// }
// }
// class test
// {
// static void Main()
// {
// Heater heater = new Heater();
// Alarm alarm = new Alarm();
// heater.Boiled += alarm.MakeAlert;
// heater.Boiled += (new Alarm()).MakeAlert;
// heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert);
// heater.Boiled += Display.Showmsg;
// heater.BoilWater();
// Console.Read();
// }
// }
//}

更加深入的了解委托和事件


// class DelegateAndEvent
// {
// //public enum Language
// //{
// // English,Chinese
// //}
// //public void GreetPeople(string name,Language lang)
// //{
// // switch (lang) {
// // case Language.English:EnglishGreeting(name);
// // break;
// // case Language.Chinese:
// // ChineseGreeting(name);
// // break;
// // }
// //}
// public delegate void GreetingDelegate(string name);

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

// public static void EnglishGreeting(string name)
// {
// Console.WriteLine("Good Morning," + name);
// }
// public static void ChineseGreeting(string name)
// {
// Console.WriteLine("早上好" + name);
// }

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

// //public class GreetingManager {
// // public GreetingDelegate delegate1;
// // public void GreetPeople(string name) {
// // if (delegate1 != null) {
// // delegate1(name);
// // }
// // }
// //}

// public class GreetingManager
// {
// public event GreetingDelegate MakeGreet;
// public void GreetPople(string name) {
// MakeGreet(name);
// }
// }
// static void Main() {
// //GreetPeople("aaa", EnglishGreeting);
// //GreetPeople("张三", ChineseGreeting);


// //GreetingDelegate delegate1, delegate2;
// //delegate1 = EnglishGreeting;
// //delegate2 = ChineseGreeting;
// //GreetPeople("aa", delegate1);
// //GreetPeople("张三四",delegate2);

// //GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
// //GreetingDelegate delegate1;
// //delegate1 = EnglishGreeting;
// //delegate1 += ChineseGreeting;
// //GreetPeople("aa", delegate1);
// //delegate1("aaa");
// //Console.Read();

// //GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
// //delegate1 += ChineseGreeting;
// //GreetPeople("aaa", delegate1);
// //Console.WriteLine();
// //delegate1 -= EnglishGreeting;
// //GreetPeople("李四", EnglishGreeting);

// //GreetingManager gm = new GreetingManager();
// //gm.delegate1 = EnglishGreeting;
// //gm.delegate1 += ChineseGreeting;
// //gm.GreetPeople("aaa");

// //GreetingManager gm = new GreetingManager();
// //gm.MakeGreet = EnglishGreeting;
// //gm.MakeGreet += ChineseGreeting;

// Console.Read();
// }

// }
//}

详见: https://www.cnblogs.com/heng95/p/5479858.html

原文地址:https://www.cnblogs.com/javazyh/p/9590317.html