C#中委托的进一步理解
前面一篇文章介绍了委托的基本知识,接下来就进一步研究一下委托。
委托类型
其实,刚开始觉得委托类型是一个比较难理解的概念,怎么也不觉得下面的"AssembleIphoneHandler"是一个类型。
publicdelegatevoidAssembleIphoneHandler();
按照正常的情况,如果我们要创建一个委托类型应该是:
publicclassAssembleIphoneHandler:System.MulticastDelegate
{
}
但是,这种写法是编译不过的,会提示不能从"System.MulticastDelegate"派生子类。
其实,这里是编译器为我们做了一个转换,当我们使用delegate关键字声明一个委托类型的时候,编译器就会按照上面代码片段中的方式为我们创建一个委托类型。
知道了这些东西,对于委托类型的理解就比较容易了,通过delegate声明的委托类型就是一个从"System.MulticastDelegate"派生出来的子类。
建立委托链
下面我们通过一个例子来看看委托链的建立,以及调用列表的变化,基于前面一篇文章中的例子进行一些修改。
classProgram
{
staticvoidMain(string[]args)
{
Appleapple=newApple();
Foxconnfoxconn=newFoxconn();
Apple.AssembleIphoneHandlerd1,d2,d3,d4=null; d1=newApple.AssembleIphoneHandler(foxconn.AssembleIphone); d2=newApple.AssembleIphoneHandler(foxconn.PackIphone); d3=newApple.AssembleIphoneHandler(foxconn.ShipIphone);
d4+=d1; d4+=d2; d4+=d3;
d4();
Console.Read(); } }
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短