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

为什么在c#中需要分部方法?事件可以用来实现同样的目标吗?,c#,.net,partial-methods,C#,.net,Partial Methods,我在读《Apress Pro LINQ:C#中的语言集成查询》一书时遇到了部分方法,但我真的不明白它们需要什么 我认为书中的示例(更改前后的属性)可以使用事件实现。有什么解释吗?它们不是“需要的”,而是大规模应用所需要的。事件的广泛使用导致了智能UI反模式,其中业务逻辑与用户界面紧密耦合,而部分功能允许您更好地分离关注点 这里还有一个指向MSDN C#部分方法编程指南的链接。 是的,您可以使用事件实现与使用分部方法类似的效果。分部方法实际上只是让代码生成器(主要是设计人员)为未生成的代码生成钩子

我在读《Apress Pro LINQ:C#中的语言集成查询》一书时遇到了部分方法,但我真的不明白它们需要什么

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

它们不是“需要的”,而是大规模应用所需要的。事件的广泛使用导致了智能UI反模式,其中业务逻辑与用户界面紧密耦合,而部分功能允许您更好地分离关注点

这里还有一个指向MSDN C#部分方法编程指南的链接。

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

然而,局部方法比事件更具优势

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

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

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

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

希望这有帮助