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 语法非常相似,这两种语言提供非常类似的功能. ...
随机推荐
- sys--system-sysdba-sysoper用户区别
当Oracle 数据库安装完毕后,系统会自动创建sys和system这两个帐户.1.sys :缺省密码为CHANGE_ON_INSTALL ,且被授予DBA角色system :缺省密码为MANAGER ...
- PropertyGird( 属性表格) 组件
本节课重点了解 EasyUI 中 PropertyGird(属性表格)组件的使用方法,这个组件依赖于 DataGrid(数据表格)组件. 一. 加载方式 //class 加载方式<table i ...
- DateBox( 日期输入框) 组件
本节课重点了解 EasyUI 中 DateBox(日期输入框)组件的使用方法,这个组件依赖于 Combo(自定义下拉框)和 Calendar(日历). 一. 加载方式//class 加载方式<i ...
- .net打包/c#winfrom程序打包
1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图) 此主题相关图片如下: 2:安装向导 关闭后打开安 ...
- css float父元素高度塌陷
css float父元素高度塌陷 float 使父元素高度塌陷不是BUG,反而是标准. float 原本是为了解决文字环绕才出现的. 当然有的时候要解决高度塌陷的问题 以下几个方法可以解决float ...
- AngularJs练习Demo17 ngRoute
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Objective-C中的copy协议
NSObject对象是否可以copy自己 NSObject类没有实现NSCopying或者NSMutableCopying协议,但是却有copy以及mutableCopy实例方法.然而,如果用NSOb ...
- java学习笔记 (5) —— Struts2 监听器配置
1.创建MyListener.java 实现 PreResultLisener 接口 import com.opensymphony.xwork2.ActionInvocation; import c ...
- jQuery模拟点击A标记
这个问题弄了半小时没想明白,后来觉得是这样的. 菜单 <li class="menu"><a href="xxx.com" target=&q ...
- 解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
执行redis 配置文件 redis-server /etc/redis/redis.conf