zoukankan      html  css  js  c++  java
  • C# 委托和事件

        委托:

    using System;    
    using System.Collections.Generic;    
    using System.Linq;    
    using System.Text;    
    using System.Threading.Tasks;    
      
    namespace ConsoleApplication1    
    {    
      
        delegate void mydelegate(string name); //声明委托    
      
        class Program2    
        {    
            public void greetpeople(string name, mydelegate dele1)    
            {    
                dele1(name);    
            }    
            public void greeten(string name)    
            {    
                Console.WriteLine("GoodMorning!"+name);    
            }    
            public void greetcn(string name)    
            {    
                Console.WriteLine("早上好!"+name);    
            }    
      
            static void Main(string[] args)    
            {    
            #region     
                Program2 p = new Program2();    
                mydelegate dele1 = new mydelegate(p.greeten);   //实例化委托    
                mydelegate dele2 = new mydelegate(p.greetcn);    
                p.greetpeople("jack", dele1);    
                p.greetpeople("早安", dele2);    
      
                dele2 = dele1;    
                p.greetpeople("早安", dele2);   //委托是可以进行赋值的    
      
                //dele1 += p.greetcn;    
                //p.greetpeople("测试", dele1);    
                mydelegate dele3 = p.greetcn;   //另一种实例化委托的方法    
                p.greetpeople("测试", dele3);    
                //实例化 委托的两种方法 一是: new。。。 而是用=  就像下面的例子一样    
                string str = new string(new char[] { 'a', 'b', 'c' });    
                string str2 = "abc";    
                Console.Write("{0}
    {1}
    ", str, str2);    
      
                mydelegate dele4 = p.greetcn;    
                dele4 += p.greeten;    
                dele4 += p.greetcn;     //增加委托方法    
                p.greetpeople("测试1", dele4);    
      
                dele4 -= p.greeten;     //移除委托方法    
                p.greetpeople("测试2", dele4);    
                Console.Read();    
      
             #endregion    
      
      
            }    
        }    
    }

    事件:

    using System;   
    using System.Collections.Generic;   
    using System.Linq;   
    using System.Text;   
    using System.Threading.Tasks;   
      
    namespace ConsoleApplication1   
    {   
      
        delegate void mydelegate(string name); //声明委托   
        class Manager   
        {   
            //public mydelegate mydele1;    //在类中 声明一个委托变量使用   
            public event mydelegate evtMydel;   // 事件   
            public void greetpeople(string name)   
            {   
                if (evtMydel != null)   
                {   
                    evtMydel(name);   
                }   
      
            }   
        }   
        class Program2   
        {   
      
        public void greeten(string name)   
         {   
                Console.WriteLine("GoodMorning!"+name);   
          }   
            public void greetcn(string name)   
            {   
                Console.WriteLine("早上好!"+name);   
            }   
      
            static void Main(string[] args)   
            {   
                Program2 p = new Program2();   
                Manager m1 = new Manager();   
      
                m1.evtMydel += p.greetcn;   //注册事件 只能用+= 或者-=    
                m1.evtMydel += p.greeten;   
                m1.evtMydel += new mydelegate(p.greeten);   
                m1.greetpeople("张三");   
                Console.Read();   
            }   
        }   
    }

    Observer的设计模式:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.Threading.Tasks;  
      
    namespace ConsoleApplication1  
    {  
      
        delegate void mydelegate1(int temp);  
        class heater  
        {  
             //一个烧水的例子  
            private int temprature;  
      
            //下面的alert show都和温度有关    
            public event mydelegate1 evtMydele;  //声明事件  
            public void boidwater()  
            {  
                for (int i = 0; i < 100; i++)  
                {  
                    temprature = i;  
                    if (temprature > 95)  
                    {  
                        evtMydele(temprature); //   
                    }  
                }  
            }  
      
            static void Main(string[] args)  
            {  
      
                heater h = new heater();  
      
                h.evtMydele += new alert().makeAlert;  
                h.evtMydele += new show().showAlert;  
      
                h.boidwater();  
                Console.Read();  
            }  
        }  
      
        class alert  
        {  
            public void makeAlert(int temprature)  
            {  
                Console.WriteLine("滴滴滴,{0}度", temprature);  
            }  
        }  
        class show  
        {  
            public void showAlert(int temprature)  
            {  
                Console.WriteLine("水开了,{0}度", temprature);  
            }  
        }    
    }

        理解委托的一种好方式就是把委托当做这样一件事情,它给方法的签名和返回类型指定了名称。就是通过委托可以把一个方法作为一个参数传入另外一个方法使用。

  • 相关阅读:
    IOS 网络请求中设置cookie
    七牛云存储 报错的问题
    理解RESTful架构
    关于APP接口设计
    WKWebView与Js实战(OC版)
    WKWebView API精讲(OC)
    iOS完整App资源收集
    WKWebView新特性及JS交互
    苹果app审核的规则总结
    Struts2实现文件的上传与动态下载功能。
  • 原文地址:https://www.cnblogs.com/KingsWang/p/3342423.html
Copyright © 2011-2022 走看看