• 【C#】委托与事件


    目录

    一、委托

    1.什么是委托

    2.委托类型的声明与初始化

    3.委托类型引用方法的调用

    4.使用委托类型作为方法的参数

    5.Action委托

    6.Func委托

    7.通用类型冒泡排序

    8.多播委托

    二、Lambda表达式

    1.匿名方法

    2.Lambda表达式表示匿名方法

    三、事件

    1.什么是事件

     2.事件应用——观察者模式


    一、委托

    1.什么是委托

    从数据结构来讲,委托是和类一样是一种用户自定义类型;从设计模式来讲,委托(类)提供了方法(对象)的抽象。它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。

    2.委托类型的声明与初始化

    声明:

    1. 以delegate关键字开头。
    2.  返回类型+委托类型名+参数列表

    delegate void MyDelegate(int a);

    这个委托可以指向带有一个int类型的参数,并且返回值是void的方法。

    MyDelegate  myDel;

    初始化:

    1. myDel= new MyDelegate(GetNumber);
    2. myDel=GetNumber;

    3.委托类型引用方法的调用

    delegate  int  MyDelegate(int a);

    MyDelegate  myDel=GetNumber;

    第一种:int  res1 = myDel(10);//通过委托实例去调用myDel所引用的方法

    第二种:int  res2 = myDel.Invoke(10);//通过invoke方法调用myDel所引用的方法

    两种方式调用方法都一样

    4.使用委托类型作为方法的参数

    5.Action委托

    1. Action是系统内置(预定义)的一个委托类型,它可以指向一个没有返回值,没有参数的方法 Action A1= GetNumber;
    2. Action可以后面通过泛型去指定action指向的方法的多个参数的类型 ,参数的类型跟Action后面声明的委托类型是对应着的(最多16个参数) Action A2=PrintInt; Action A3 = GetStrNum; A3("LOL",10);

    6.Func委托

    Func引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型

     Func F1 = Test1;

     Func F2 = Test2;

     Func F3 = Test3;

    7.通用类型冒泡排序

    (1)对int类型数组进行排序

    (2)通用的排序方法

    8.多播委托

    添加移除委托的引用

    前面使用的委托都只包含一个方法的调用,但是委托也可以包含多个方法,这种委托叫做多播委托。使用多播委托就可以按照顺序调用多个方法,多播委托只能得到调用的最后一个方法的结果,一般我们把多播委托的返回类型声明为void。

    二、Lambda表达式

    1.匿名方法

    到目前为止,使用委托,都是先定义一个方法,然后把方法给委托的实例。但还有另外一种使用委托的方式,不用去定义一个方法,应该说是使用匿名方法(方法没有名字)。

    在这里相当于直接把要引用的方法直接写在了后面,优点是减少了要编写的代码,减少代码的复杂性。匿名方法 本质上是一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值。

    2.Lambda表达式表示匿名方法

    从C#3.0开始,可以使用Lambda表达式代替匿名方法。只要有委托参数类型的地方就可以使用Lambda表达式。Lambda运算符“=>”的左边列出了需要的参数,如果是一个参数可以直接写  a=>(参数名自己定义),如果多个参数就使用括号括起来,参数之间以,间隔,无参数的的话不能省略()。

    (1)如果Lambda表达式只有一条语句,在方法快内就不需要花括号和return语句,编译器会自动添加return语句,

      Func square = x=>x*x;     

      添加花括号,return语句和分号是完全合法的

      Func square = x=>

      {

      return x*x;

      }

    (2)如果Lambda表达式的实现代码中需要多条语句,就必须添加花括号和return语句。

    三、事件

    1.什么是事件

    事件(event)基于委托,为委托提供了一个发布/订阅机制,我们可以说事件是一种具有特殊签名的委托。事件(event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托。

     事件的声明

    public event 委托类型 事件名;

    事件使用event关键词来声明,他的返回类值是一个委托类型。

    通常事件的命名,以名字+Event 作为他的名称,在编码中尽量使用规范命名,增加代码可读性。

     2.事件应用——观察者模式

     一群老鼠在房间里面偷东西,猫进房间喵喵叫,老鼠逃跑,主人被吵醒。

     

     该事件的实现

  • 相关阅读:
    关于分布式分片,你该知道的事儿
    静态curl库编译与使用(c++)
    前端基础(四十一):你不知道的JavaScript - 行为委托 及 类写法的实例应用
    简易通讯录Promax
    MySQL 详解 存储过程 和 存储函数
    2023年中国体育赛事行业现状及趋势分析:体育与科技逐步融合,推动产业高质量发展[图]
    信息学奥赛一本通:1005:地球人口承载力估计
    中国电子学会2023年09月份青少年软件编程Scratch图形化等级考试试卷一级真题(含答案)
    一号店按关键字搜索yhd商品 API 返回值说明
    MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
  • 原文地址:https://blog.csdn.net/m0_64476561/article/details/134024446