在我这菜鸟理解上,委托就是可以用方法名调用另一方法的便捷方法,可以简化switch等语句的重复。最近做项目的时候恰好需要用到委托,便来复习及学习委托的使用。嗯...本人以前并没有用过,只是稍微知道而已。以下是整理的笔记。

一.委托的概念

    委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。

二.委托类型的定义

委托类型必须在被用来创建变量以及类型对象之前声明。

委托类型的声明:

1.以delegate关键字开头。

2.返回类型+委托类型名+参数列表

delegate void MyDel(int a)

三.实例

1)现在我们先创建了控制台程序,进行简单的实例

namespace Func
{public delegate void MyDel();//声明一个自定义委托class Program{static void Main(string[] args){MyDel say1 = SayHi;MyDel say2 = new MyDel(SayHi);say1();say2();}static void SayHi(){Console.WriteLine("hi");}}
}

2)扩展实例

namespace Func
{public delegate int MyDel(int num);//声明一个自定义委托class Program{static int Add1(int a){int b = 10 + a;Console.WriteLine("——Add1———");return b;}static int Add2(int a){int b = 10 - a;Console.WriteLine("——Add2———");return b;}static void Calculate(MyDel ex, int a){var result = ex(a);Console.WriteLine(result + "\n");}static void Main(string[] args){Calculate(Add1, 1);Calculate(Add2, 10);Console.ReadKey();}}
}

结果如下图

上面实现了把方法当作参数在另一个方法中传递或调用”;从上面可以看出,调用的方法和委托的返回类型,参数类型都必须一致。

我我们可以把委托作为参数传递给封装好了的方法,通过委托来动态的调用方法。

四.委托的加减运算

可以使用+=运算符,为委托新增方法。

同样可以使用-=运算符,为委托移除方法。

当委托列表中有几个方法时,调用委托时,则会依次经过各个方法,并返回列表最后一项方法的结果。

namespace Func
{public delegate int MyDel(int num);//声明一个自定义委托class Program{static int Add1(int a){int b = 10 + a;Console.WriteLine("——Add1———");return b;}static int Add2(int a){int b = 10 - a;Console.WriteLine("——Add2———");return b;}static void Calculate(MyDel ex, int a){var result = ex(a);Console.WriteLine(result + "\n");}static void Main(string[] args){//Calculate(Add1, 1);//Calculate(Add2, 10);MyDel myDel = Add1;myDel += Add2;Calculate(myDel, 10);Console.ReadKey();}}
}

结果如下图:

那么有时候我们需要返回每个方法的结果,此方法就不适用了,那怎么才能实现每个方法的返回结果都可以获取到呢?后续再写了。今天就简单的介绍了委托的基本概念和使用。

c#委托(Delegates)--基本概念及使用相关推荐

  1. 事件与委托的一点概念理解

    事件与委托的一点概念理解 早就接触过delegate和event,但是始终是一知半解,今天刚好有机会就好好研究一下! Delegate 顾名思义就是委托,委托的意思就是麻烦别人帮我干些事情.比如,我要 ...

  2. C#多线程函数如何传参数和返回值

    提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托就是 具有 同样参数和返回值 的函数的集合. 比如 public delegate void MyDelegate(int a ...

  3. 【Xamarin笔记】Events, Protocols and Delegates

    Events, Protocols and Delegates   事件.协议和委托 This article presents the key iOS technologies used to re ...

  4. 委托(C# 编程指南)

    委托(C# 编程指南) 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 委托用于将方法作为参数传递给其他方法.事件处理程序就是 ...

  5. Kotlin笔记(七)——委托属性(Delegated Properties)

    Delegated Properties我姑且将其称为委托属性,因为实在不知道怎么翻译好,委托属性是一类特殊的Kotlin属性,先来看看最基本的委托属性. class Dog1 {var name: ...

  6. 大白话系列之C#委托与事件讲解(一)

    从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...

  7. C#综合揭秘——深入分析委托与事件

    引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...

  8. C#:委托基础与事件

    通过以下思维导图,学习委托的基本概念,后面着重讲解委托的运用,希望通过最简单的方式收获更多的知识. 1.委托的各种写法 1.委托 委托名=new 委托(会调用的方法名); 委托名(参数); 2.委托 ...

  9. C#综合揭秘——深入分析委托与事件(上)

    引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...

最新文章

  1. 运用BT在centos下搭建一个博客论坛
  2. class_create
  3. 怎么设置qq信息同步服务器,QQ输入法如何设置网络同步
  4. 2009计算机网络考研大题,2009年计算机考研统考真题网络部分分析
  5. 统计相关系数r与r2的区别_什么是相关系数? 统计解释中的r值
  6. FinNexus宣布已售出1000万枚FNX给相关投资者
  7. uctools.php,Discuz曝出安全隐患 XSS脚本漏洞和uctools.php
  8. 如何更改springboot的tomcat版本
  9. sqlldr mysql_sqlldr数据导入
  10. document 常用事件
  11. 线性模型(Linear Model)
  12. lol8月7号服务器维护,LOL8月7日更新了什么内容 8.15新版本更新维护公告
  13. c++超级简单的计算器
  14. 2021C++ 实验六 STL
  15. 云原生 + 无代码,「DaoCloud 道客」探索无限可能——「DaoCloud 道客」+轻流联合解决方案
  16. 线程钩子HookC#实例
  17. 用Python的Turtle画哆啦A梦
  18. zedboard教程
  19. web期末网站设计大作业:动漫网站设计——龙猫(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 动漫漫画网页设计
  20. 《有限元分析基础教程》(曾攀)笔记二-梁单元方程推导(二):简支梁挠曲线近似解...

热门文章

  1. redis7.0.5分布式集群
  2. String类的copyValueOf与valueOf的区别以及valueOf与toString的区别
  3. 阿里云 rm-rf 怎么办
  4. TextView的android:maxHeight,android:minHeight的正确设置
  5. 2023最新通信工程毕业设计题目选题推荐100例
  6. 为什么 0x 不像看起来那么无需信任
  7. spyder pyecharts不显示_专业显示器凭什么比家用显示器贵?优派VP2785-2K:贵是有原因的...
  8. linux离线安装dotnet,CentOS 7.1下安装dotnet core
  9. 制作一个图书馆新图书的数据入库页面。把新图书的各项参数准备提交给后台
  10. scanf返回值被忽略问题