为什么在c#中需要部分方法? 可以使用事件来实现相同的目标吗?

我正在阅读“Apress Pro LINQ:C#语言集成查询”这本书,我遇到了部分方法,但我真的不明白它们的需要是什么。

我认为本书中的示例(更改前后的属性)可以使用事件来实现。 那有什么解释吗?

是的,您可以使用部分方法实现与事件类似的效果。 部分方法实际上只是让代码生成器(主要是设计者)为非生成代码生成钩子的一种方法。 事件可以填补这个角色。

然而,特别是对于事件的部分方法具有优势

  • 如果没有实现,则从生成的IL中完全删除部分方法调用。 这不能用事件来完成。
  • 部分方法的设计是为了解决有1个钩子和1个消费者的提供者的问题。 事件旨在为具有N个消费者的1个提供者建模,并且具有这种设计带来的开销
  • 没有订购问题(谁先行)。 对于事件,您需要确保订阅事件的代码在设计器生成引发事件的代码之前运行。 如果设计者生成构造函数,那么这并不总是可行的。 部分方法没有这样的问题。

如果没有实现,编译器将删除对部分方法的调用。 使用事件的替代方案,必须在运行时检查侦听器(它们也需要存储等)。 这允许部分方法更高效,特别是当存在许多潜在的“事件”并且只有少数具有“听众”注册时。

它们不是“需要的”,但是对于大规模应用来说是期望的。 广泛使用事件会导致Smart UI反模式,其中业务逻辑与用户界面紧密耦合,而部分function允许您更好地区分您的顾虑。

以下是部分方法的MSDN C#编程指南的链接。 http://msdn.microsoft.com/en-us/library/wa80x488.aspx

部分方法在编译时定义,在运行时定义事件。 所以他们是不同的东西。

部分方法被用于扩展您无法控制的现有类(框架的一部分或自动生成)

希望这可以帮助