C#委托的详细使用
代码如下:
public delegate void GreetingDelegate(string name);//定义委托,它定义了可以代表方法的类型
class Program
{
public static void EnglishGreeting(string name)
{
Console.WriteLine("Moring,"+name);
} public static void ChineseGreeting(string name)
{
Console.WriteLine("早上好,"+name);
} //注意此方法,他接收一个GreetingDelegate类型的方法作为参数
public static void GreetingPeople(string name,GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
} static void Main(string[] args)
{
//版本1
//GreetingPeople("Jake", EnglishGreeting);//英文问好
//GreetingPeople("王旭", ChineseGreeting);//中文问好 //版本2
//string name1, name2;
//name1 = "Jack";
//name2 = "王旭";
//GreetingPeople(name1,EnglishGreeting);
//GreetingPeople(name2,ChineseGreeting); //版本3
//GreetingDelegate delegate1, delegate2;
//delegate1 = EnglishGreeting;
//delegate2 = ChineseGreeting;
//GreetingPeople("Jack",delegate1);
//GreetingPeople("王旭",delegate2); //版本4
/*
注意:这里第一次使用"="是赋值的语法,第二次使用"+="是绑定的语法("-="取消绑定),如果第一次就使用"+="将会出现"使用了未赋值的局部变量"的编译错误
*/
//GreetingDelegate delegate1;
//delegate1 = EnglishGreeting;//先给委托类型的变量赋值
//delegate1 += ChineseGreeting;//在给此委托变量绑定一个值
//GreetingPeople("Jack",delegate1);//将先后调用EnglishGreeting和ChineseGreeting方法 //版本5
//GreetingDelegate delegate1;
//delegate1 = EnglishGreeting;
//delegate1 += ChineseGreeting;
//delegate1("Jack"); //版本6
//GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
//delegate1 += ChineseGreeting;
//delegate1("Jack"); //版本7
GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
delegate1 += ChineseGreeting;
//将先后调用EnglishGreeting和ChineseGreeting方法
GreetingPeople("Jack",delegate1); delegate1 -= EnglishGreeting;//取消对EnglishGreeting方法的绑定
GreetingPeople("王旭",delegate1);//只显示ChineseGreeting方法 Console.ReadLine();
}
}
C#委托的详细使用的更多相关文章
- C#委托的详细总结
1.什么是委托 委托是C#中一种类型,它的作用相当于C语言中的函数指针,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用if- ...
- C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...
- 理解js事件冒泡事件委托事件捕获
js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <di ...
- UE4技术总结——委托
UE4技术总结--委托 目录 UE4技术总结--委托 一.定义 二.用法 2.1 声明与调用委托 2.1.1 单播委托 2.1.1.a 声明 2.1.1.b 绑定 2.1.1.c 执行委托 2.1.1 ...
- C#由变量捕获引起对闭包的思考
前言 偶尔翻翻书籍看看原理性的东西确实有点枯燥,之前有看到园中有位园友说到3-6年工作经验的人应该了解的.NET知识,其中就有一点是关于C#中的闭包,其实早之前在看书时(之前根本不知道C#中还有闭包这 ...
- [知识库分享系列] 二、.NET(ASP.NET)
最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...
- C#由变量捕获引起对闭包
C#由变量捕获引起对闭包的思考 前言 偶尔翻翻书籍看看原理性的东西确实有点枯燥,之前有看到园中有位园友说到3-6年工作经验的人应该了解的.NET知识,其中就有一点是关于C#中的闭包,其实早之前在看 ...
- CLR类型设计之泛型(二)
在上一篇文章中,介绍了什么是泛型,以及泛型和非泛型的区别,这篇文章主要讲一些泛型的高级用法,泛型方法,泛型接口和泛型委托,协变和逆变泛型类型参数和约束性,泛型的高级用法在平时的业务中用的不多,多用于封 ...
- C# 与 Java 的一些差异
如果你是 Java 开发人员,则可以在 Xamarin 平台上充分利用你的技能和现有代码,同时获得 C# 的代码重用优势.你会发现 C# 语法与 Java 语法非常相似,这两种语言提供非常类似的功能. ...
随机推荐
- Python进阶之路---1.5python数据类型-字符串
字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...
- Docker远程访问get(root)shell姿势
0x00 概述 在用swarm来管理dockers容器集群时默认开启了2375端口,通过远程访问docker run -H tcp://ip:2375 $command 可任意执行docker命令.这 ...
- Intent MIME 打开各种类型的文件
使用 public class MainActivity extends ListActivity { public static final String path = Environmen ...
- getParameter百科
获取数据库中的参数数据 getParameter(). request.getParameter("username");其中的这个username 是接受前台的参数 比如in ...
- 微信企业号 出现redirect_uri unauthorized 50001 解决办法
在企业号内获得用户信息时,需要对域名授权,如果不授权会提示: redirect_uri unauthorized 50001 错误. 通常,我们会在 输入我们的授权域名. 今天在企业号内又新建了一个 ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- 用Gmap开发winform地图应用程序(一)Gmap介绍与添加
GMap.NET是一个强大的免费开源.NET组件.该组件允许用户加载Google.雅虎.必应.街景等地图.用户可以在这些地图上进行点的标记.路线规划.区域操作.GMap.NET应用于Windows F ...
- 输入框提示--------百度IFE前端task2
第一版本: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- js拖动层
模仿网易彩票网(http://caipiao.163.com/)的登陆框自己做了一个拖动层,不过有点小问题——在谷歌浏览拖动的时候鼠标状态变成了文字状态(cursor:text;) <!DOCT ...
- android手机端保存xml数据
1.前面写的这个不能继续插入数据,今天补上,当文件不存在的时候就创建,存在就直接往里面添加数据. 2.代码如下: <pre name="code" class="j ...