C#零基础学习笔记011-事件和委托

目录

11 事件和委托

11.1 委托定义

11.2 事件


 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号:程序喵星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值