c#委托
来源:互联网 发布:盘点2016年网络流行语 编辑:程序博客网 时间:2024/06/06 00:37
委托是一种可以把引用存储为函数的类型。委托声明非常类似于函数,但不带函数体,而且要使用delegate关键字。委托的声明指定了一个函数签名,其中包含一个返回函数和参数列表。在定义了委托之后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同签名的函数引用。之后就可以使用委托变量调用这个函数,就像该变量是一个函数一样。
如下使用委托调用函数:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication4{ class Program { delegate double ProcessDelegate(double param1, double param2); static double Multiply(double param1,double param2) { return param1 * param2; } static double Divide(double param1,double param2) { return param1 / param2; } static void Main(string[] args) { ProcessDelegate process; Console.WriteLine("Enter 2 numbers separated with a comma:"); string input = Console.ReadLine(); int comPos = input.IndexOf(","); double param1 = Convert.ToDouble(input.Substring(0, comPos)); double param2 = Convert.ToDouble(input.Substring(comPos + 1, input.Length - 1 - comPos)); Console.WriteLine("Enter M to Multiply or D to Divite:"); input = Console.ReadLine(); if (input == "M") { process = new ProcessDelegate(Multiply); }else { process = new ProcessDelegate(Divide); } Console.WriteLine("The result is:{0}", process(param1, param2)); Console.ReadKey(); } }}
再如在网上找到的简单例子:
public delegate void BugTicketEventHandler();
delegate 是关键词,【注:EventHandler是一个声明委托的微软C#的命名标准,我的习惯是标准就要第一时间说,也就这个命名习惯要第一时间养成】
完了,这就是委托,就这么简单,看看和我们一般的方法有什么区别呢?
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//小张类 public class MrZhang { //其实买车票的悲情人物是小张 public static void BuyTicket() { Console.WriteLine("NND,每次都让我去买票,急人呀!"); } } //小明类 class MrMing { //声明一个委托,其实就是个“命令” public delegate void BugTicketEventHandler(); public static void Main(string[] args) { //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票” BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); //这时候委托被附上了具体的方法 myDelegate(); Console.ReadKey(); } }
BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);
这是委托的声明方法, BugTicketEventHandler(委托的方法);委托的方法必须要加上,因为委托的构造函数是不为空的。
注:委托的参数和返回类型,都要和你要具体委托的方法要一致,例:
public delegate void BugTicketEventHandler();
public static void BuyTicket()
{
Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
}
同学们,看到这里可以先消化消化,休息一下,我们简单的讲一下委托链的概念:
其实委托链也是相当的简单,在现实生活中,小明叫小张买完车票之后,可能接着又让他带张电影票,
而我们程序世界里的表述为:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//小张类 public class MrZhang { //其实买车票的悲情人物是小张 public static void BuyTicket() { Console.WriteLine("NND,每次都让我去买票,鸡人呀!"); } public static void BuyMovieTicket() { Console.WriteLine("我去,自己泡妞,还要让我带电影票!"); } } //小明类 class MrMing { //声明一个委托,其实就是个“命令” public delegate void BugTicketEventHandler(); public static void Main(string[] args) { //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票” BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket); myDelegate += MrZhang.BuyMovieTicket; //这时候委托被附上了具体的方法 myDelegate(); Console.ReadKey(); } }
其实,我们只是在程序中加了 myDelegate += MrZhang.BuyMovieTicket;
这时这个委托就相当于要做2件事情,先是买车票,再是买电影票拉!
- C#委托-委托概述
- C#委托
- C#委托
- C#委托
- c#委托
- C# 委托
- C#委托
- C# 委托
- c#委托
- C#委托
- c#委托
- C#委托
- C# - 委托
- C#委托
- C#委托
- C#委托
- C# 委托
- c#委托
- C++之宁以non-member,non-friend替换member函数(23)---《Effecive C++》
- 四旋翼飞行器结构和原理
- java常见证书类型和密钥库类型
- 后向传播算法“backpropragation”详解
- 使用VMware虚拟机在win10安装Ubuntu16.04
- c#委托
- Linux:GDB调试
- Spring笔记02-Spring容器
- bash 移动光标
- eclipse写了个JDBC程序却找不到文件却抛出java.io.FileNotFoundException 文件找不到错误
- 设计模式的征途—14.职责链(Chain of Responsibility)模式
- Windows下生成目录结构树
- 【解决方案】闭包函数在for循环中的使用案例——for循环绑定监听事件索引值总是最后一个
- HTTP协议