初探委托

目录

前言

虽然学习C#有段时间了,可一直没怎么接触委托,在学习多线程的时候,看到了很多委托的例子,有点不太理解,故查阅资料学习,特此整理成文。

1.委托是什么?

个人认为,委托可以从下面两个方面来理解:

(1) 从类型来讲,委托是和结构体、类一样是一种用户自定义类型。

(2) 从内容上来讲,委托(类)提供了方法(对象)的抽象。

既然委托是一种类型,那么它存储的是什么数据?

我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。

调用委托的时候,委托包含的所有方法将被执行。

2.下面以一个列子来讲解如何使用委托和委托的特性

2.1定义委托

      //定义了一个委托
      delegate void MyDel(int x);

2.2定义相同签名和返回回类型的方法

public  class Temp
   {
       public static void MyDel789(int x)
       {
           Console.WriteLine("Temp:"+x + 789);
       }

   }

 public  class test
    {

       public void MyDel456(int x)
       {
           Console.WriteLine("test:" + x + 456);
       }
   }
   public class TestDelegate
       {
           public static void MyDel123(int x){
               Console.WriteLine("TestDelegate:" + x + 123);
           }

       }

2.3 定义委托

          //声明变量,  初始化(两种方法)
          MyDel del123 = new MyDel(TestDelegate.MyDel123);
          MyDel del456 = new test().MyDel456;

2.4调用委托

          //委托调用
          del123(0);
          del456(0);

2.5组合委托


          //委托组合
          MyDel delSum = del123 + del456;
          Console.WriteLine("SUM:");
          delSum(0);
          MyDel del789 = new MyDel(Temp.MyDel789);

2.6 "加减"委托

个人认为:可以将委托看做是能够装载指定格式的方法的集合


          //委托加减运算
          delSum += del789;
          delSum -= del123;
          Console.WriteLine("SUM:");
          delSum(0);

2.7 匿名委托及其变形

          // 匿名方法
          MyDel del = delegate(int x)
          {
              Console.WriteLine(x);
          };//匿名方法


          //Lambda表达式
          MyDel del2 = (int x) =>
          {
              Console.WriteLine(x * x);

          };//Lambda表达式
          MyDel del3 = x =>
          {
              Console.WriteLine(x * 3);
          };//简写的Lambda表达式
          del(1);
          del2(2);
          del3(3);

欢迎交流


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,087评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,303评论 9 118
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,242评论 6 13
  • Crayons:在应用开发中如果使用 Interface Builder 来构建界面的话,经常会需要为 view ...
    冰J冰阅读 226评论 0 0