C#中委托的进一步理解

前端技术 2023/09/03 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();
    }
}

本文地址:https://www.stayed.cn/item/8547

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。