C#:温故知新篇——委托与事件(委托)

引子:委托是一种类型,它的地位与class 、struct、enum等是一样的,我们可以这样说:在任何一个可以声明class的地方都可以声明一个delegate。我们经常将委托与事件放在一起去理解,其实这只是委托的一个应用。要想理解委托必须透过现象究其本质,委托到底是干什么用的?

现象:

public delegate void MyDelegate();
public delegate string MyDelegate(string name);

  从上面两个委托的声明,我们会发现委托看上去和方法的声明很类似。的确如此,委托有返回类型和相应参数列表,其实就是这个“返回类型”和“参数列表“限制了可以添加(或者称之为”注册“)到委托中的方法类型,即:只有返回类型和参数列表(参数类型、数目等)与委托一样的方法才能在委托中注册或添加。

本质:委托的实质就是进行了方法的封装,只不过封装到委托中的方法有规定。从内存堆栈的角度去理解,委托封装的不是具体的方法,而是方法在内存堆中的地址(有点像C++中的函数指针,其实我个人也是这么理解)。另外,添加到委托中的方法是有先后顺序的,当程序调用委托时,它会按照这个方法列表中的先后顺序进行方法的调用,同时如果委托定义时指定了返回类型,并且委托中有多个方法,则在调用委托完毕返回的值是排在最后的方法的返回值,排在之前的方法的返回值都会被程序忽略。

温故而知新——在不断学习技术的过程中,回过头来看看(”温故“)以前学习过的知识,或许会有新的发现和收获。

原文地址:https://www.cnblogs.com/397926301/p/2404683.html