03.C#委托(二章1.1)
一章1.5-1.8介绍的是com、动态类型及.NET平台一些说明,每个心中都有自己的标准,听一家之言,叫人不爽,相信自己有自己的标准和自己的编程理念就OK了,也不想码那么多说明性的文字,直接跳过吧,当然自己还是看过了。进入正题,这篇来说一下委托(在深入理解C#的同时,我也在学C++,委托确实和函数指针有相似的地方,大家也可以去了解下。)
委托的四个基本构成:
- 委托类型的声明
- 满足委托类型签名的方法
- 委托类型实例
- 调用委托实例
声明委托使用delegate关键字
public delegate void Drive(string name);
如上,声明了一个委托类型Drive,由System.MulticastDelegate派生,而System.MulticastDelegate又是继承于System.Delegate,该类型有自己的方法和属性。与该类型匹配的方法的签名必需使用一个string类型作为参数和返回一个void类型(即不返回),可以是静态方法或者一个实例方法。
public class Car
{
//实例方法
public void Drive(string name)
{
Console.WriteLine(name + "正在开车!!!");
} //静态方法
public static void StaticDrive(string name)
{
Console.WriteLine(name + "正在开车!!!");
}
}
如上,Car类中的Drive方法是一个实例方法,使用该方法前要有一个Car类型的实例,StaticDrive是一个静态方法,使用类作用域便可以调用,且上述两个方法的签名均满足上述委托对于方法签名的要求。
接下来要创建一个Drive类型的委托实例,并且去调用。
class Program
{
static void Main(string[] args)
{ //声明两个委托实例
Drive drive0, drive1;
Car car = new Car(); //对委托实例进行赋值,一个使用静态方法,一个使用实例方法
drive0 = new Drive(Car.StaticDrive);
drive1 = new Drive(car.Drive); //调用委托实例方法 //使用委托实例中的Invoke方法进行调用
drive0.Invoke("Leo");
//使用简写方法
drive1("DuDu"); Console.ReadKey(); }
}
上术只是对一个简单操作的调用,委托更多的情况使用于多个操作联合使用。可以使用Delegate.Combine和Delegate.Remove对操作的增减,一般使用简写方式+=和-=。
class Program
{
static void Main(string[] args)
{ //声明两个委托实例
Drive drive0, drive1;
Car car = new Car(); //对委托实例进行赋值,一个使用静态方法,一个使用实例方法
drive0 = new Drive(Car.StaticDrive);
drive1 = new Drive(car.Drive); //调用委托实例方法 //使用委托实例中的Invoke方法进行调用
drive0.Invoke("Leo");
//使用简写方法
drive1("DuDu"); drive0 += drive1;
drive0.Invoke("Leo"); Console.ReadKey(); }
}
运行结果如下:
使用+=或者-=操作能更加方便,且利于理解。
03.C#委托(二章1.1)的更多相关文章
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- X32位 天堂2 二章/三章 服务端协议号修改方法
[本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 42 ...
- 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子
http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...
- <构建之法>第十一章、十二章有感
十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- [CSAPP笔记][第十二章并发编程]
第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...
随机推荐
- nyoj 170 网络的可靠性
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...
- 前端mock数据之mockjax和mockjson
用处 在前后台共同进行一个项目的时候常会遇到一种情景, 后台定义好接口,前端按照接口进行开发, 当前端开发完成后台接口却还没有开发完成, 这个时候要进行接口测试, 只能等后台开发完成才能测试, 在这中 ...
- R语言Cairo包的使用
Cairo使用起来非常简单,和基础包grDevices中的函数对应. CairoPNG---grDevices:png(). CairoTIFF---grDevices:tiff(). CairoPD ...
- Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)
1. Hadoop 2.0 中的资源管理 http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/ Hadoop ...
- [转]移动web开发中meta标签作用
今天在尝试做移动页面的时候遇到了一个问题,<meta content="telephone=no,email=no" name="format-detection& ...
- HDU 4819 Mosaic --二维线段树(树套树)
题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2. 解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的 ...
- 2014 Super Training #6 G Trim the Nails --状态压缩+BFS
原题: ZOJ 3675 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3675 由m<=20可知,可用一个二进制数表 ...
- np问题
NP(np) Time Limit:1000ms Memory Limit:64MB 题目描述 LYK 喜欢研究一些比较困难的问题,比如 np 问题.这次它又遇到一个棘手的 np 问题.问题是这个样子 ...
- 博友的 编写高质量代码 改善java程序的151个建议
编写高质量代码 改善java程序的151个建议 http://www.cnblogs.com/selene/category/876189.html
- git 添加文件
git 添加文件三步骤 git add filename git commit -m 'remarks' git push origin master