C#中委托的基础入门与实现方法

C#中委托的基础入门与实现方法,博智网带你了解详细信息 。
目录

  • 前言
  • 关于委托
  • 委托的实现
    • 一、基本实现方式
    • 二、使用委托时的一些特殊方式
      • 1、委托实例对象的创建多元化:
      • 2、事件绑定的多种方式
    • 三、委托的几种特殊实现方式
      • 1,使用Action方法
        • 2,使用Func方法
      • 四、委托的一些特殊小知识
        • 1、委托闭包的产生
        • 2,关于事件
    • 总结

      前言似乎委托对于C#而言是一种高级属性,但是我依旧希望你就算第一次看我的文章,也能有很大的收获 。
      所以本博客的语言描述尽量简单易懂,知识点也是面向初入门对于委托不了解的学习者的 。当然如果有幸有大佬发现文章的错误点,也欢迎留言指出!
      关于委托关于委托的介绍主要来源于C#文档:委托概述(本文章优势在于去掉一些不必要的细节,对于初学者而言简单高效)
      委托的定义主要是下面几个方面:
      • 委托是一种引用类型:表示对具有特定参数列表和返回类型的方法的引用
      • 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联 。你可以通过委托实例调用方法
      委托本质上来讲就是将方法作为参数传递给其他方法的一种实现方式,当然开发者也可以直接去调用方法 。但是当一个项目扩展到足够大时,这种直接调用的方式就会很复杂,难以维护 。而委托不会,可以很方便的进行后期的扩展开发 。只需要将自己的方法传入已经写好的对应的委托即可 。而不需要再在大量的代码中找到调用处写入自己的方法 。
      关于委托的一些特点是(暂时不了解没有关系):
      • 委托类似于 C++ 函数指针,但委托完全面向对象,不像 C++ 指针会记住函数,委托会同时封装对象实例和方法 。
      • 委托允许将方法作为参数进行传递 。
      • 委托可用于定义回调方法 。
      • 委托可以链接在一起;例如,可以对一个事件调用多个方法 。
      • 方法不必与委托类型完全匹配 。有关详细信息,请参阅使用委托中的变体 。
      • 使用Lambda 表达式可以更简练地编写内联代码块 。Lambda表达式(在某些上下文中)可编译为委托类型 。若要详细了解lambda 表达式,请参阅 lambda 表达式 。
      如果对于一个初学者,你可以简单的理解,委托就是一个更高级的调用方法的方式,而你要学习的,就是这种方式的实现方法,然后后期再慢慢理解更多的细节 。
      委托的实现
      一、基本实现方式前面也说,委托是一个引用类型,要使用委托,肯定就需要对其进行定义并创建一个委托对象,下面使用一个带有一个参数的案例来理解委托
      public class DemoDelegate{//T1:delegate void TestDel(string s);TestDel Del;//T4:static void Main(string[] args){DemoDelegate demo = new DemoDelegate();demo.CreateDelObject();demo.Del?.Invoke("你们好");}//T3:public void CreateDelObject(){Del += TestEventOne;Del += TestEventTwo;}//T2:public void TestEventOne(string str){Console.WriteLine(str);}public void TestEventTwo(string str){Console.WriteLine(str);}}
      如果你是刚刚接触委托这个概念,可能对于这些代码的含义不是特别了解,没关系,你可以根据注释的顺序来看代码并理解委托的实现机制:
      • T1:通过delegate关键字定义一个委托类型TestDel,并创建一个实例Del
      • T2: 也很好理解,创建两个测试方法,可以执行输出
      • T3: 是委托的关键,为刚刚创建的委托来添加事件方法
      • T4: 执行委托实例Del,可以简单理解为执行该实例绑定的所有事件方法
      当然有一些语法是比较独特的,比如说+=这样的语法,就是一种为委托添加事件方法的方法,而对于执行委托语句demo.Del?.Invoke("你们好");中Invoke()为执行该委托对象内方法的API,?则可以在Del委托对象为空时,系统不报错
      关于?的具体含义,可查阅:
      可为空引用类型
      其实委托主要是有这简单的四步来实现了,通过这个案例,更加明显的体现出委托将一系列方法作为参数来让其他方法去调用的特点 。
      二、使用委托时的一些特殊方式通过上面的案例,可以看出对于委托的实现是很简单的,但是C#还是为我们提供了很多更加间接或者集成的用法,具体有:
      1、委托实例对象的创建多元化:创建委托类型的多种方式:

      推荐阅读