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游戏开发从入门 ...
随机推荐
- SpringMVC(一)
开始学习SpringMVC了,就写下每次学习的内容,以及自己的理解.方便以后回顾知道自己哪里好哪里不好~~~ 一.目录 1.主目录如此: 2.target目录 二.文件 1.主要用到的几个文件夹(如主 ...
- ELK beats平台介绍(11th)
beats是一个代理,将不同类型的数据发送到elasticsearch.beats可以直接将数据发送到elasticsearch,也可以通过logstash将数据发送elasticsearch. be ...
- Winform- DotNetBar for Windows Forms的安装的添加
Winform界面不好看,偶尔在网上看到winform的界面美化,对比了一下选择了DotNetBar for Windows Forms 1.破解版网上很多,提供一个参考的下载地址http://dx. ...
- SQL Server 127个SQL server热门资料汇总
SQL Server 127个SQL server热门资料汇总 最近有许多关于如何学习SQLSERVER的问题,其实新手入门的资源和贴子很多,现在向大家隆重推荐经过精心整理的[SQLSer ...
- 重金悬赏的微软:提交Win8漏洞以及发布Win8应用
随着Windows 8.1这个饱受诟病的操作系统的推出,微软想一举改变颓势,也只有从用户体验上下手了. 近来,微软针对Windows 8.1的漏洞,推出了三项奖励措施: 1.对于发现关键性漏洞,并且这 ...
- 放弃移动版Flash而非AIR
之前看到标题为"Adobe放弃移动版flash"的新闻,我很震惊,为何Adobe会放弃这么一个大市场呢? 这样无疑打击原来在flash的开发上的应用,我想很多人和我想的一样,fla ...
- 多边形背景生成工具推荐-Trianglify
前端开发whqet,csdn,王海庆,whqet,前端开发专家 low poly低多边形(相似于折纸的效果),多边形风格的设计应用越来越多,今天我们就来看一个利用d3.js写成的生成器Triangli ...
- iOS开发——开发技巧&Mac常用命令
现实和隐藏文件拓展名 显示:defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder 隐藏:def ...
- linux僵死进程的产生与避免
作者:lingdxuyan来源:ChinaUnix技术博客,本文版权由lingdxuyan所有,如需转载,请注明出处. 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁, ...
- Test complete测试工具介绍
Test complete 是一款性价比比较高的测试工具,能够满足大多数用户的自动化测试的需求. Test complete 是近几年流行和发展起来的一款自动化测试工具,早期版本由Automated ...