一章1.5-1.8介绍的是com、动态类型及.NET平台一些说明,每个心中都有自己的标准,听一家之言,叫人不爽,相信自己有自己的标准和自己的编程理念就OK了,也不想码那么多说明性的文字,直接跳过吧,当然自己还是看过了。进入正题,这篇来说一下委托(在深入理解C#的同时,我也在学C++,委托确实和函数指针有相似的地方,大家也可以去了解下。)

  委托的四个基本构成:

  1. 委托类型的声明
  2. 满足委托类型签名的方法
  3. 委托类型实例
  4. 调用委托实例

  声明委托使用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)的更多相关文章

  1. PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...

  2. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

  3. X32位 天堂2 二章/三章 服务端协议号修改方法

    [本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 42 ...

  4. 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子

    http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...

  5. <构建之法>第十一章、十二章有感

    十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...

  6. sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)

    第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的  DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...

  7. 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记

    第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...

  8. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

  9. [CSAPP笔记][第十二章并发编程]

    第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...

随机推荐

  1. 数据结构--栈的应用(表达式求值 nyoj 35)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35 题目: 表达式求值 时间限制:3000 ms | 内存限制:65535 KB描述 AC ...

  2. hdu 敌兵布阵(线段树之单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. Centos7 搭建hadoop2.6 HA

    用户配置: User :root Password:toor 2.创建新用户 student Pwd: student 3.安装virtualbox的增强工具软件 4.系统默认安装的是openjdk ...

  4. Elastic search入门

    首先是下载elasticsearch https://www.elastic.co/downloads,解压: 然后下载了中文分析器ik,github上搜索elasticsearch-ik就能找到,h ...

  5. 漫谈计算摄像学 (一):直观理解光场(Light Field)

    什么是计算摄像学 计算摄像学(Computational Photography)是近年来越来越受到注意的一个新的领域,在学术界早已火热.本来计算摄像学的业界应用在群众中一直没什么知名度,直到Lytr ...

  6. Eclipse打开xml文件报校验错误解决办法

    XML文件在Eclipse中报校验错误: The content of element type "web-app" must match "(icon?,display ...

  7. xshell5 启动显示 mfc110.dll msvcp110.dll 未找到问题 解决办法

    1. 安装 Visual C++ Redistributable for Visual Studio 2012 x86版本 注意: 一定要安装x86版本.(xshell5是32位的程序) 微软的官方下 ...

  8. 由索引节点(inode)爆满引发的问题

    关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下: 一.发现问题在公司一台配置较低的Linux服务器(内存.硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命 ...

  9. javascript中的栈结构

    1.栈的定义 栈是一种和列表类似的数据结构,可以用它来解决很多的编程问题,栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现. 栈是一种特殊的列表,站内的元素只 ...

  10. velocity .vm

    关于.vm 后缀的文件,是velocity的文件.velocity是基于java的一种页面模板引擎,支持#if #else #foreach等写法的前台文件.$link.contextPath是该引擎 ...