zoukankan      html  css  js  c++  java
  • (原创)C#零基础学习笔记011-事件和委托

    微信公众号已开通,搜索微信公众号:程序喵星人。点击关注^_^

    11.事件和委托

      1.委托定义

        委托和类一样,是一种用户自定义的类型(所以也是引用类型)。但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列的预定义操作。

        委托是类型,就好像类是类型一样。与类一样,委托类型必须在被用来创建变量以及类型的对象之前声明。

          delegate void MyDel(int x);

        创建委托对象

               委托类型 变量

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    // 委托的定义和实现
    
    namespace Lesson_40_1
    {
        // 声明一个委托:关于加减乘除,它的返回类型都是double类型,并且参数都有两个参数且是double类型
        // delegate 是声明委托的关键字
        // 语法:delegate 返回类型 委托名字([参数列表])
        delegate double DelOperator(double num1, double num2);
        class Program
        {
            static void Main(string[] args)
            {
                // 使用委托的时候,需要实例化一个委托对象,参数是方法名
                DelOperator delOp = new DelOperator(add);
                // 在调用委托的时候,实际上调用的是委托所指向的这个方法
                //double result = delOp.Invoke(3, 5);
                double result = delOp(3, 5);
                Console.WriteLine("委托调用的方法的执行结果:" + result);
                // 添加和移除新的委托方法
                delOp += new DelOperator(div);  // 委托添加一个指向的方法
                result = delOp(3, 5);
                Console.WriteLine("添加div委托后,结果:" + result);
                delOp -= new DelOperator(div);  // 委托移除指向的方法
                result = delOp(3, 5);
                Console.WriteLine("移除div委托后,结果:" + result);
            }
            static double add(double a, double b)
            {
                return a + b;
            }
            static double div(double c, double d)
            {
                return c - d;
            }
        }
    }
    

      

      2.事件

    MobileServer.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Lesson_41_1
    {
        // 手机服务端的类
        public delegate void DelSendMsg(string p_msg);
        public class MobileServer
        {
            // 事件是委托对象的实例
            public static DelSendMsg delegateSendMsg;
            // 有一个方法,就是将服务端的消息推送给客户端的方法。
            public void sendMsg(string p_msg)
            {
                Console.WriteLine("服务端开始给客户端的手机发送推送的消息");
                // 如果客户端已经订阅了该事件
                if (delegateSendMsg != null)
                {
                    // 事件的执行,事件的执行是关联到具体的事件绑定的方法的执行。
                    delegateSendMsg(p_msg);  
                }
            }
        }
    }
    

      

    MobileClient.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Lesson_41_1
    {
        // 手机客户端
        public class MobileClient
        {
            public void dingYue()
            {
                Console.WriteLine("手机客户端已经订阅了服务端的推送消息");
                MobileServer.delegateSendMsg = new DelSendMsg(mobileServer_sendEvent);
            }
            void mobileServer_sendEvent(string p_msg)
            {
                Console.WriteLine("这是客户端手机接收到服务端推送的消息");
                Console.WriteLine("服务端推送的消息是:" + p_msg);
            }
        }
    }
    

      

    Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    // 事件
    
    namespace Lesson_41_1
    {
        class Program
        {
            static void Main(string[] args)
            {
                MobileClient mclient = new MobileClient();
                mclient.dingYue();
                MobileServer mserver = new MobileServer();
                mserver.sendMsg("这是一个消息事件");
            }
        }
    }
    

      

  • 相关阅读:
    NoSQL生态系统——hash分片和范围分片两种分片
    NoSQL生态系统——事务机制,行锁,LSM,缓存多次写操作,RWN
    W5500 keep-alive的用途及使用
    APUE学习总结
    Web Socket rfc6455 握 (C++)
    java.nio分析软件包(三)---Charset理解力
    比量iOS6/iOS7, 3.5inch/4.0inch
    【从翻译mos文章】rac数据库,HC_<SID>.dat其他文件Oracle_Home用例下。
    Type mismatch: cannot convert from Enumeration<String> to Enumeration<Object>
    c++宏源证券编程
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/14273451.html
Copyright © 2011-2022 走看看