.Net C# delegate 委托
在C#中,委托(delegate)类似于指针一样,是指向某个具体的方法的引用类型变量。
一般用来进行 方法级别 解耦,提高灵活性和可扩展性。
声明委托:
//定义好3个委托private delegate string delegateA();private delegate string delegateB(string par);private delegate int delegateC(int par);
定义好需要通过委托调用的方法:
/// <summary>/// 在类中定义好方法/// 在类外部使用委托调用/// </summary>class delegateClass{public string GetA(){return "delegateA--委托返回";}public string GetB(string par){return par;}public int GetC(int par){return par;}}
实例化委托:
//实例化目标类delegateClass deleClass = new delegateClass();//将委托与指定的方法绑定delegateA @delegateA = new delegateA(deleClass.GetA);//绑定无参数方法delegateB @delegateB = new delegateB(deleClass.GetB);//绑定一个字符类型参数方法delegateC @delegateC = new delegateC(deleClass.GetC);//绑定一个整数类型参数方法
调用委托:
//输出委托调用后返回的结果Console.WriteLine(delegateA.Invoke());Console.WriteLine(delegateB.Invoke("delegateB--委托返回"));Console.WriteLine("delegateC--委托返回--"+delegateC.Invoke(11));
输出结果:
委托的多播
在 delegateClass 增加两个方法
public void GetD(){Console.WriteLine("delegateD--委托返回");}public void GetE(){Console.WriteLine("delegateE--委托返回");}
使用 新定义的 @delegateE 委托进行多播操作:
//实例化目标类delegateClass deleClass = new delegateClass();//将委托与指定的方法绑定delegateA @delegateA = new delegateA(deleClass.GetA);//绑定无参数方法delegateB @delegateB = new delegateB(deleClass.GetB);//绑定一个字符类型参数方法delegateC @delegateC = new delegateC(deleClass.GetC);//绑定一个整数类型参数方法//输出委托调用后返回的结果Console.WriteLine(delegateA.Invoke());Console.WriteLine(delegateB.Invoke("delegateB--委托返回"));Console.WriteLine("delegateC--委托返回--"+delegateC.Invoke(11));//委托多播delegateE @delegateE = deleClass.GetE;//可以直接指定方法实例化委托@delegateE += deleClass.GetD;//通过+=符号向委托追加需要多播操作的方法,同理-=可以在列表中删除多播的方法。//调用多播委托列表delegateE.Invoke();
输出结果:
委托的多播可以一次调用多个方法,具体的用法根据可以根据项目需要自行设计,微软给出的示例是 用来写日志,同时向多个位置(控制台、文件)输出日志,可以用来参考。
.Net C# delegate 委托相关推荐
- Strategy模式与Delegate委托
Strategy模式是对算法的封装.即使是一个计算行为,如果其实现有其多样性,为达到易扩展的目的,我们也有必要将其抽象出来,以接口的形式来定义.由于充分利用了面向对象的多态性,在调用该行为时,其具体的 ...
- delegate委托
delegate委托: 三个概念: C# 中的委托类似于 C 或 C++ 中的函数指针. 委托是面向对象.类型安全的,并且是安全的. 委托和接口的类似之处是:它们都允许分隔规范和实现. 一个原则: 被 ...
- C# Delegate(委托)与多线程
C# Delegate(委托)与多线程 很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程. public void ThreadProc(); ...
- 【C#学习】delegate(委托) 和 event(事件)
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.在C#中方法不能作为参数直接传递,必须 ...
- 转:终于会用c#中的delegate(委托)和event(事件)了
第一个例子: public class DelegateTest {// 声明delegate对象 public delegate void CompareDelegate(int a,int b); ...
- Delegate委托的使用
Delegate委托的使用 委托的说明 委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象. 比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象 ...
- UE4 C++:Delegate委托
目录 概念 定义 声明委托 单播委托 声明宏 绑定委托 执行函数 用法示例 不带参数Delegate 带参数Delegate 传递有效负载数据 多播委托 声明宏 绑定多播委托 多播执行 动态委托 声明 ...
- C#学习基本概念之关键字---delegate(委托)
委托类型的声明与方法签名相似, 有一个返回值和任意数目任意类型的参数: public delegate void TestDelegate(string message); public deleg ...
- Csharp关键字----delegate(委托)
Delegate类简介 ------------------------ 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一 ...
- delegate 委托方法
一先定义一个委托方法 ---------第一个类XX //定议委托 public event ordinary Ordinary; //定议委托方法 public delegate void ordi ...
最新文章
- 数据分层/ODS/DW/DM
- 编写高效的C程序与C代码优化
- python web开发-flask中response,cookies,session对象使用详解
- EduCoder Linux 文件/目录管理
- 音视频技术开发周刊(第127期)
- linux命令补遗 - 4
- 基本查询(Query查询中文)
- linux 内存管理 ppt,Linux内存管理 Memory Manager.ppt
- Laravel Request 和 Laravel Input 常用操作方法
- exec和source的区别
- Tensorflow从开始到放弃(技术篇)
- 教资高中计算机知识点,如何备考教师资格证高中信息技术
- python图像配准的原理_SIFT图像匹配及其python实现
- php安全上传图片,PHP安全上传图片的方法
- relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared objec
- LeetCode动态规划题解
- 黑马“兔年限定”春节礼盒准时送达,快来领!
- hive之beeline连接与操作
- ath9k网卡驱动相关
- 西门子SMART200 通过Modbus 读取温湿度传感器数据实例