举例理解C#中的委托
来源:互联网 发布:肯尼迪 知乎 编辑:程序博客网 时间:2024/06/07 14:31
有时需要将一个函数作为另一个函数的参数,这是就要用到委托。
定义委托:
delegate void AnimalPlay(string name);
函数(以AnimalPlay型委托为参数)
static void CircusStart(AnimalPlay animalPlay, string name)
{
//传入要调用的方法,和被调用的方法所需的参数,这里的参数必须与被调用方法的参数类型一致。
Console.WriteLine("开始");
animalPlay(name);
}
static void DogPlay(string greetings)
{
Console.WriteLine("{0},I am dogPlay! WangWang", greetings);
}
static void CatPlay(string greetings)
{
Console.WriteLine("{0},I am CatPlay! MiaoMiao", greetings);
}
在主函数中使用委托:
static void Main(string[] args)
{
//把函数DogPlay()转换为AnimalPlay型委托
AnimalPlay deleDogPlay = new AnimalPlay(DogPlay);
//把委托deleDogPlay传给函数CircusStart()
CircusStart(deleDogPlay, "Good evening");
}
输出:Good evening, I am DogPlay! WangWang
相当于:
static void Main(string [] args)
{
CircusStart(new AnimalPlay(CatPlay), "Good morning");
}
输出:Good morning, I am CatPlay! MiaoMiao
在我们的程序中,我们总是调用函数CircusStart(),定义该函数时,我们不知道也不关心传递给它的委托到底代表哪个函数,直到调用函数CircusStart(),并把实际参数传递给它时,这个函数才具体化。传给它什么样的具体函数,就执行哪个方法。
在新版本的.NET中,可以直接传递函数名称,省去把函数转换为委托实例的过程。
static void Main(string[] args)
{
CircusStart(DogPlay, "Hello everyone!");
}
输出:Hello everyone!, I am DogPlay! WangWang
static void Main(string[] args)
{
AnimalPlay animalsPlay = new AnimalPlay(DogPlay);
animalsPlay += new AnimalPlay(CatPlay);
CircusStart(animalsPlay,"Good afternoon");
}
两个函数被依次调用。
输出:Hello everyone!, I am DogPlay! WangWang
Good morning, I am CatPlay! MiaoMiao
多播委托的返回值一般为void,如果为非void类型,多播委托可能有多个返回值(因为会调用多个函数),这时多播委托将返回最后一个方法的返回值。但实际中不推荐这样应用,因为这些方法的调用顺序未正式定义,因此应避免编写依赖于特定调用顺序的代码。
- 举例理解C#中的委托
- 理解C#中的委托[翻译]
- 理解C#中的委托(Deligate)
- 深入理解c#中的委托
- 深入理解C#中的委托
- 理解C#中的委托和事件
- 深入理解C#中的委托和事件
- 理解C#中的事件与委托
- 深入理解C#中的委托和事件
- 理解C# 中的委托和事件
- 理解C# 中的委托和事件
- C# 中的委托和事件的理解
- 理解C#中的委托和事件
- C#中的Predicate 理解 及 delegate 委托
- 快速理解C#中的委托与事件
- 深刻理解:C#中的委托、事件
- 深刻理解:C#中的委托、事件
- c#编程:委托程序举例
- Android性能优化之内存
- JavaScript基础之常见的错误
- 杭电 KazaQ's Socks
- 机器学习笔记(四)卷积神经网络CNN
- ROW_NUMBER() 取多条反馈记录中,日期最近的一条数据
- 举例理解C#中的委托
- 1.查看linux下,Qt有是否有通道为关闭
- unity扩展菜单项排序序号
- webstorm注册码
- 网络通信socket连接数问题
- JavaScript学习笔记
- HTML文件中meta标签的使用
- Java面试题全集(上)
- codeforces 499B Lecture