c#重要特性之一委托
委托的构成必须满足的4个条件:
- 声明委托类型;
- 必须有一个方法包含了要执行的代码;
- 必须创建一个委托实例;
- 必须调用(invoke)委托实例
委托包装的方法需要满足以下条件
- 方法的签名必须与委托一致,方法签名包括参数的个数、类型和顺序;
- 方法的返回类型要和委托一致,注意,方法的返回类型不属于方法签名的一部分
示例一:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleAppDelegate
{
class Program
{
//1、使用delegate关键字来定义一个委托类型
delegate void MyDelegate(int parm1, int parm2); static void Main(string[] args)
{
//2、声明委托变量d
MyDelegate d;
//3、实例化委托类型,传递的方法也可以为静态方法,这里传递的是实例方法
d = new MyDelegate(new Program().Add);
//4、委托类型作为参数传递给另一个方法
MyMethod(d);
Console.Read();
}
//该方法的定义必须与委托定义相同,即返回类型void,两个int类型的参数
void Add(int parm1,int parm2)
{
int sum = parm1 + parm2;
Console.WriteLine("两个数的和为:"+sum);
}
//方法的参数是委托类型
private static void MyMethod(MyDelegate mydelegate)
{
//5、在方法中调用委托
//mydelegate.Invoke(1, 2);
mydelegate.Invoke(1, 2);
}
}
}
示例二:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleAppDelegateGreeting
{
class Program
{ static void Main(string[] args)
{
Program p = new Program();
p.Greeting("苍井空",p.ChineseGreeting);
p.Greeting("Tommy Li", p.EnglishGreeting);
Console.Read();
}
//定义委托类型
public delegate void GreetingDelegate(string name); //有了委托之后可以像下面这样实现打招呼方法
public void Greeting(string name,GreetingDelegate callback)
{
//调用委托
callback(name);
}
//美国人打招呼方法
public void EnglishGreeting(string name)
{
Console.WriteLine("Hello, " + name);
}
//中国人打招呼方法
public void ChineseGreeting(string name)
{
Console.WriteLine("你好, " + name);
}
}
}
总结:
- 委托封装了包含特殊返回类型和一组参数的行为,类似包含单一方法的接口;
- 委托类型声明中所描述的类型签名决定了哪个方法可用于创建委托实例,同时决定了调用的签名;
- 为了创建委托实例,需要一个方法以及(对于实例方法来说)调用方法的目标;
- 委托实例是不易变的;
- 每个委托实例都包含一个调用列表---一个操作列表;
- 委托实例可以合并到一起,也可以从一个委托实例中删除另一个;
- 事件不是委托实例-----只是成对的add/remove方法(类似于属性的取值方法/赋值方法)
c#重要特性之一委托的更多相关文章
- .NET面试题解析(05)-常量、字段、属性、特性与委托
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 弱小和无知不是生存的障碍,傲慢才是!——<三体> 常见面试题目: 1. const和reado ...
- C#委托和事件?策略模式?接口回调?还不清楚的赶紧来看我扯
早前学习委托的时候,写过一点东西,今天带着新的思考和认知,再记点东西.这篇文章扯到设计模式中的策略模式,观察者模式,还有.NET的特性之一--委托.真的,请相信我,我只是在扯淡...... 场景练习 ...
- C#6.0语言规范(十七) 特性
许多C#语言使程序员能够指定有关程序中定义的实体的声明性信息.例如,在一个类中的方法的可访问性由与装饰它指定method_modifier小号public,protected,internal,和pr ...
- 扯一扯 C#委托和事件?策略模式?接口回调?
早前学习委托的时候,写过一点东西,今天带着新的思考和认知,再记点东西.这篇文章扯到设计模式中的策略模式,观察者模式,还有.NET的特性之一--委托.真的,请相信我,我只是在扯淡...... 场景练习 ...
- C#中的委托解析
谈及到C#的基本特性,“委托”是不得不去了解和深入分析的一个特性.对于大多数刚入门的程序员谈到“委托”时,都会想到“将方法作为方法的参数进行传递”,很多时候都只是知道简单的定义,主要是因为“委托”在理 ...
- .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引
系列文章索引: .NET面试题解析(01)-值类型与引用类型 .NET面试题解析(02)-拆箱与装箱 .NET面试题解析(03)-string与字符操作 .NET面试题解析(04)-类型.方法与继承 ...
- .net基础学java系列(三)徘徊反思
.net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...
- Spring Security OAuth 2.0
续·前一篇<OAuth 2.0> OAuth 2.0 Provider 实现 在OAuth 2.0中,provider角色事实上是把授权服务和资源服务分开,有时候它们也可能在同一个应用中, ...
- unity学习路线_重新出发
入门级 1.先观看视频教程做一个小案例 官方英文:Unity - Learn – Modules 国内中文:Sike学院 基础级 1.你需要接触完整性的教程网站 Siki学院 Unity游戏开发从入门 ...
随机推荐
- hdu 4115 (2—SAT)
题意:两个人石头剪刀布,一个人的出法已确定,另一个人的出法有一定约束,某两次要相同或者不同,问你第二个人能否全部都不失败. 思路:根据Bob出的情况,我们可以确定每次Alice有两种方案. R与P,S ...
- cocos2d_随手篇1_关于ccTouchBegan的调用
在新的cocos框架里,旧的调用ccTouchBegan方法被和谐掉了!so! 直接来代码 1 -(void)doSometing{ 2 [[[CCDirector sharedDirector] ...
- 【转载】总结一下Android中主题(Theme)的正确玩法
http://www.cnblogs.com/zhouyou96/p/5323138.html 总结一下Android中主题(Theme)的正确玩法 在AndroidManifest.xml文件中有& ...
- sudo apt-get install lib32stdc++6
[2014-06-19 12:39:55 - android_marketing_zj] /home/exmyth/package/adt-bundle-linux-x86_64-20140321/s ...
- 友盟分享 -QQAPI- QQApi.m:250 param error: url is nil
有一个项目 需要用到友盟分享,点击分享内容,需要跳转到指定的url,不带参数的url非常好跳,也没什么问题,但是 带了参数之后:比如http://121.43.121.8:8080/tj/photo/ ...
- HDU 5071 Chat(2014鞍山B,模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others) Memory ...
- offsetTop和scrollTop的差别
近期想写个组件,结果被这两个属性搞的有点晕,查了下文档和资料,对这两个属性总结例如以下: 一直以来对offsetLeft,offsetTop,scrollLeft,scrollTop这几个方法非常迷糊 ...
- 文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance/GoodSync/Allway Sync/Compare Advance)
关于文件同步的文章,已经很多次出现在异次元上了,因为它们很多都能实实在在提高工作便利性.比方说有我们熟悉的云端同步软件 Dropbox.金山快盘,以及曾经还介绍过可本地使用的 Allway Sync ...
- js中数组内置方法
var arr = ['A','B','C','D']; length 计算数组的长度 arr.length//4 indexOf() 搜索一个指定的元素的位置 arr.indexOf('C');// ...
- Android_UI
* fang@author * Android布局原则: * (1)尽量多使用LinearLayout和RelativeLAyout,不要使用AbsoluteLayout * (2)在布局层次一样的情 ...