在我这菜鸟理解上,委托就是可以用方法名调用另一方法的便捷方法,可以简化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();
}
}
}
结果如下图:

那么有时候我们需要返回每个方法的结果,此方法就不适用了,那怎么才能实现每个方法的返回结果都可以获取到呢?后续再写了。今天就简单的介绍了委托的基本概念和使用。
---------------------
作者:陈一木木
来源:CSDN
原文:https://blog.csdn.net/weixin_41963036/article/details/80295111
版权声明:本文为博主原创文章,转载请附上博文链接!

c#委托(Delegates)--基本概念及使用 转发的更多相关文章

  1. c#委托(Delegates)--基本概念及使用

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

  2. OC 代理 协议 委托 数据源的概念

    (网摘) OBJC 中的 protocol 相当于 java 里的接口,delagate 就是接口的实现类(C中的回调类似 ): 数据源就是对象遵循了存储数据的协议,可以存储使用数据 协议表示了方法可 ...

  3. Delegate 委托复习(-) 委托的基本概念

    1. 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型.      声明一个代理的例子:     public delegate int MyDelegate(stri ...

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

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  5. c#委托概念

    委托的官方概念是:安全封装方法的类型. 百度百科的概念是,委托是个类,定义了方法的类型,使得方法可以作为另外一个方法的参数进行传递.使得程序具有很好的扩展性. 揉碎了讲一下这个概念: 张三要做三件事: ...

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

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

  7. 成员函数指针与高效C++委托 (delegate)

    下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...

  8. [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式

    引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...

  9. [转载]C#深入分析委托与事件

    原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...

随机推荐

  1. windows环境下安装pymysql(操作带图)

    在windows环境下安装pymysql,首先要找到python的安装位置,如果在c盘,启动cmd的时候,要获取管理员权限. 具体步骤,一,管理员模式启动cmd.在箭头指定位置,搜索cmd,出现快捷方 ...

  2. Android的Context && 安卓常用系统服务(当前运行包名/当前网络状态和开关网络/音频服务/马达服务) (转)

    转:http://blog.csdn.net/zhandoushi1982/article/details/8501773 Context字面意思上下文,位于framework 的android.co ...

  3. CJE-Jenkins认证工程师考试预约报名流程

    先决条件 考试费用150美元,需要由master/visr信用卡支付 考试全英文  哈哈哈 考试目的 通过各种渠道能够找到Jenkins的学习资料,并能够完成jenkins的配置管理,还是想全面的系统 ...

  4. VEX IR语言语法

    /*---------------------------------------------------------------*//*--- High-level IR description - ...

  5. 执行sudo apt-get update报错

    1.在官网源https://mirrors.ustc.edu.cn/repogen/下载对应版本最新的源,比如我是16.04版本的ubuntu,对应下载的是这个 2.下载sources.list完成之 ...

  6. 实用maven笔记二-信息&依赖管理

    目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...

  7. Eureka 系列(02)Eureka 一致性协议

    目录 Eureka 系列(02)Eureka 一致性协议 0. Spring Cloud 系列目录 - Eureka 篇 1. 服务发现方案对比 1.1 技术选型 1.2 数据模型 2. Eureka ...

  8. 301重定向将不带www的域名跳转到www的域名,403 Forbidden You don’t have permission to access the URL on this server

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/14/301%e9%87%8d%e5%ae%9a%e5%90%91%e5%b0%86% ...

  9. 【目录】Asp.NETCore轻松学系列

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  10. OpenGL学习——绘制第一个三角形

    终于把三角形绘制出来了,首先一些关键概念.操作. Vertex Data                       顶点数据 VBO Vertex Buffer Objects  顶点缓冲对象 VA ...