• 委托和事件


    委托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

  • 相关阅读:
    总结Cnblogs支持的常用Markdown语法
    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
    我的博客今天开通了,请多指教!
    技术分析:Femtocell家庭基站通信截获、伪造任意短信
    数据库防火墙如何防范SQL注入行为
    Pjax.js防刷新技术
    【写给新人】做开发几年的个人经历
    WebRTC之PeerConnection的建立过程
    基于Licode demo的屏幕共享功能的实现
    基于WebRTC的MCU开源项目Licode的环境搭建
  • 原文地址:https://www.cnblogs.com/javazyh/p/9590317.html
Copyright © 2020-2023  润新知