void和非void返回类型目前一直被认为是不兼容的。部分原因是因为系统的其他方面(特别是JIT)需要知道,在执行方法时返回值是否会留在栈上。
作者注:这里我故意含糊地使用了栈这个词,以避免太多不相关的细节。更多的信息请参阅Eric Lippert的博文The void is
invariant(http://mng.bz/4g58)。
委托的实质是间接完成某种操作,事实上,许多面向对 象编程技术都在做同样的事情。我们看到,这增大了复杂性(看看为了输出这点儿内容,用了多 少行代码),但同时也增加了灵活性。
委托总结
下面对委托进行总结:
委托封装了包含特殊返回类型和一组参数的行为,类似包含单一方法的接口;
委托类型声明中所描述的类型签名决定了哪个方法可用于创建委托实例,同时决定了调
用的签名;
为了创建委托实例,需要一个方法以及(对于实例方法来说)调用方法的目标;
委托实例是不易变的;
每个委托实例都包含一个调用列表——一个操作列表;
委托实例可以合并到一起,也可以从一个委托实例中删除另一个;
事件不是委托实例——只是成对的add/remove方法(类似于属性的取值方法/赋值方法)。
委托是C#和.NET的一个非常具体的主题,是大背景下的一个小细节。在本章剩余的部分,
将讨论一些更宽泛的主题。首先要讨论的是,当说到C#是一种静态类型的语言时,具体是什么意
思,以及这种说法有何暗示。