• 【原创】C#零基础学习笔记011-事件和委托


    其他路径:

    CSDN: https://blog.csdn.net/wodehao0808

    微信公众号:程序喵星人

    更多资源和视频教程,QQ:1902686547

    11 事件和委托

    11.1 委托定义

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

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

        delegate void MyDel(int x);

      创建委托对象

         委托类型 变量

    11.1.1 Example: 委托的定义和实现

    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;

            }

        }

    }

    11.2 事件

    11.2.1 Exampale: 事件

    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("这是一个消息事件");

            }

        }

    }

  • 相关阅读:
    《JavaScript & jQuery交互式Web前端开发》之JavaScript基础指令
    hash_map原理及C++实现
    开源大数据引擎:Greenplum 数据库架构分析
    摆脱命令行,Ubuntu下配置Android开发环境
    JS学习十四天----server端运行JS代码
    【苦读官方文档】2.Android应用程序基本原理概述
    UVA
    android页面间传递对象
    大话设计模式C++版——建造者模式
    poj 3370 Halloween treats
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/14609205.html
Copyright © 2020-2023  润新知