当前位置: 首页 > news >正文

白话C#之委托

一、什么是委托?

书本上是这样来定义委托的:

委托是一种动态调用方法的类型,属于引用型。委托是对方法的抽象和封装。委托对象实质上代表了方法的引用(即内存地址)。委托通常是委托某个方法来实现具体的功能。当我们调用委托的时候,委托包含的所有方法将被执行。虽然在定义委托时与方法有些相似,但我们不能将其称为方法。

白话委托是这样的: 

委托就是可以把方法名作为参数来调用的方法,生活中这样的场景很多,比如点外卖:

在没有外卖平台的时候,我们都是拿着钱去买外卖,钱就是变量,通过现场交易返回我们想要的食物,交易过程就是方法名;

现在美团来了,我们就不用去现场交易,只需要把你的钱给美团,美团帮你买好食物送到你家里去,美团就是一个委托。

二、委托的声明

委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。

例如,假设有一个委托:

public delegate int MyDelegate (string s);

上面的委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。

委托的声明是什么意思呢?

你想要买外卖,以前你都是拿着rmb去买的, 现在美团来了,你还得拿着rmb给美团,他才会帮忙买到你想要的食物。

如果你不给他rmb,给是美金是不行滴。

三、实例化委托(Delegate)

一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。例如:

public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);

using System;delegate int NumberChanger(int n);
namespace DelegateAppl
{class TestDelegate{static int num = 10;public static int AddNum(int p){num += p;return num;}public static int MultNum(int q){num *= q;return num;}public static int getNum(){return num;}static void Main(string[] args){// 创建委托实例NumberChanger nc1 = new NumberChanger(AddNum);NumberChanger nc2 = new NumberChanger(MultNum);// 使用委托对象调用方法nc1(25);Console.WriteLine("Value of Num: {0}", getNum());nc2(5);Console.WriteLine("Value of Num: {0}", getNum());Console.ReadKey();}}
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of Num: 35
Value of Num: 175

 

http://www.lryc.cn/news/11045.html

相关文章:

  • jsp高校教职工管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 2023年数学建模美赛A题(A drought stricken plant communities)分析与编程
  • Delphi 中自定义鼠标指针图像
  • 【计算机网络】物理层
  • 华为OD机试 - 最少停车数(Python)
  • 面试题-前端开发JavaScript篇上(答案超详细)
  • 【计算机网络】运输层
  • 20222023华为OD机试 - 基站维修工程师(Python)
  • 21. 合并两个有序链表
  • 产品经理知识体系:5.如何做好产品数据分析?
  • 详解垃圾回收算法,优缺点是什么?|金三银四系列
  • Android 虚拟 A/B 详解(七) SnapshotManager 之标识文件
  • LA@生成子空间@范数@衡量矩阵大小@正交化
  • MT2012_竹鼠的白色季节
  • MySQL是什么?它有什么优势?
  • 基础篇—CSS padding(填充\内边距)解析
  • 二进制枚举
  • 2|数据挖掘|聚类分析|k-means/k-均值算法
  • 使用和制作动、静态库
  • 【Java基础】023 -- 集合进阶(List、Set、泛型、树)
  • 面试题整理01-集合详解
  • 数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)
  • ArcGIS网络分析之发布网络分析服务(二)
  • js实现元素样式切换的基本功能
  • java 策略模式 + 工厂模式 实例
  • 本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和部署教程
  • 华为OD机试 - 异常的打卡记录 | 备考思路,刷题要点,答疑 【新解法】
  • 「机器学习笔记」之深度学习基础概念(基于Pytorch)
  • 概率和似然
  • 前期软件项目评估偏差,如何有效处理?