C#中委托的进一步理解

文章介绍了委托的基本知识,接下来就进一步研究一下委托。


委托类型

其实,刚开始觉得委托类型是一个比较难理解的概念,怎么也不觉得下面的”AssembleIphoneHandler”是一个类型。

代码如下:

public delegate void AssembleIphoneHandler();

按照正常的情况,如果我们要创建一个委托类型应该是:

代码如下:

public class AssembleIphoneHandler : System.MulticastDelegate

{

}

但是,这种写法是编译不过的,会提示不能从”System.MulticastDelegate”派生子类。

其实,这里是编译器为我们做了一个转换,当我们使用delegate关键字声明一个委托类型的时候,编译器就会按照上面代码片段中的方式为我们创建一个委托类型。

知道了这些东西,对于委托类型的理解就比较容易了,通过delegate声明的委托类型就是一个从”System.MulticastDelegate”派生出来的子类。


建立委托链

下面我们通过一个例子来看看委托链的建立,以及调用列表的变化,基于前面一篇文章中的例子进行一些修改。

代码如下:

class Program

{

static void Main(string[] args)

{

Apple apple = new Apple();

Foxconn foxconn = new Foxconn();

Apple.AssembleIphoneHandler d1, d2, d3, d4 = null;

d1 = new Apple.AssembleIphoneHandler(foxconn.AssembleIphone);

d2 = new Apple.AssembleIphoneHandler(foxconn.PackIphone);

d3 = new Apple.AssembleIphoneHandler(foxconn.ShipIphone);

d4 += d1;

d4 += d2;

d4 += d3;

d4();

Console.Read();

}

}

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#中委托的进一步理解

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23130.html

相关内容

C# 获取IP及判断IP是否在区间

C# this1??ü×?μ?????ó?·¨

C#求数组中元素全排列的方法

C#生成DLL文件的方法小结


C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)

c#编写的番茄钟倒计时器代码

C#中实现在32位、64位系统下自动切换不同的SQLite dll文件

C#实现自定义定时组件的方法

时间: 2024-10-11 17:42:18

C#中委托的进一步理解的相关文章

对Java中字符串的进一步理解

字符串在程序开发中无处不在,也是用户交互所涉及到最频繁的数据类型,那么字符串不仅仅就是我们简单的理解的String str = "abc";一起来更加深入的看一下 在Java中,字符串被作为String类型的对象处理,和基本数据类型不同,字符串可以直接使用各种字符串对象的方法,而基本数据类型不行,String类位于java.lang包中,默认情况下该包会被自动的导入所有的应用程序 String对象创建后不能被更改,是不可变的,我们重新赋值并不是修改了对象所引用的内存空间的数据,而是创建

关于C#中委托的一些理解与模仿

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; ///委托是对方法的类型的抽象///方法的类型是由返回值.形参个数及类型定义的///所以委托也通过返回值.形参个数及类型定义了不同类型的方法///

进一步理解委托

前面一篇文章介绍了委托的基本知识,接下来就进一步研究一下委托. 委托类型 其实,刚开始觉得委托类型是一个比较难理解的概念,怎么也不觉得下面的"AssembleIphoneHandler"是一个类型. public delegate void AssembleIphoneHandler(); 按照正常的情况,如果我们要创建一个委托类型应该是: public class AssembleIphoneHandler : System.MulticastDelegate { } 但是,这种写法

C#中委托和事件

目 录 1.1 理解委托 2 1.1.1 将方法作为方法的参数 2 1.1.2 将方法绑定到委托 4 1.2 事件的由来 6 1.2.1 更好的封装性 6 1.2.2 限制类型能力 9 1.3 委托的编译代码 10 1.4 .NET 框架中的委托和事件 11 1.4.1 范例说明 11 1.4.2 Observer 设计模式简介 12 1.4.3 实现范例的Observer 设计模式 13 1.4.4 .NET 框架中的委托与事件 14 1.5 委托进阶 16 1.5.1 为什么委托定义的返回值

seach tree的deletion的实现——对树的指针的进一步理解

一颗binary search tree,我们要在其中删除node1.而node1对应的key是,比如说,key1.删除的基本想法是什么呢? 1.找到key1对应的那个node在哪里.这个用一个迭代就可以完成了. 2.删掉这个node (1)如果这个node没有左右子树,那么直接删掉就好了. (2)如果这个node只有左子树或者右子树,那么直接让左右子树缩进上来就好了. (3)如果既有左子树又有右子树,那么就从左子树里面找出最大的node,用这个node来替换掉需要删除的那个节点. 举个栗子:有

堆排序的进一步理解

堆-顾名思义,上面小,下面大,或者上面大,下面小. 在堆排序过程中,首先应该建堆.如何将数组中的元素建立成一个规范的堆行结构. 二叉堆是完全二叉树或者是近似完全二叉树.二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值. 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆). 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆.当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆. 假设根结点的下标为1,则第 i 个结点的父结点下标为

委托事件的理解

委托是一种带有签名的类,需要用复合这个签名的静态函数或者非静态函数来初始化,就像楚怀王说:"先入秦关者望之".此时还不知道谁会先入秦观,可能是刘邦,可能是项羽.等到时间发展到一定时机,结论出来了,这个事委托给刘邦了.前提是刘邦复合这个签名,先入秦关了. 事件和委托类似,只不过事件源于委托,声明的时候需要先定义一个委托类型.也就是委托和类同级,事件和类里的属性方法同一个级别.事件只能在定义该事件的类里被初始化和使用,除了+=和-=.而委托无此限制.事件更形象化,就像,反秦起义这个事件爆发

C#委托零基础理解

C#委托零基础理解(转) 1,  为什么使用委托  2.什么是委托  3.委托如何使用 为什么使用委托? 委托是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的. 什么是委托? 委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有相同的行为,委托方法的使用和其他方法一样,具有参数和返回值. 如何使用委托 下面咱们

c#中委托和事件(转)

C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参