为什么需要 C# 中的部分类方法?事件能否用来实现相同的目标?

12

我在阅读《Apress Pro LINQ: Language Integrated Query in C#》这本书时,遇到了"partial methods"这个词,但我真的不明白为什么需要它们。

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

4个回答

23

是的,你可以通过事件来实现与部分类似的效果,部分类似乎只是让代码生成器(主要是设计师)生成非生成代码的钩子的一种方式。事件可以发挥这个作用。

然而,与事件相比,部分类具有特定的优势:

  • 如果没有实现,部分类调用将完全从生成的 IL 中删除。这在事件中无法完成。
  • 部分类的设计是为了解决只有一个钩子提供者和一个消费者的问题。事件用于模拟1个提供者和N个消费者,并具有此设计所带来的开销。
  • 不存在排序问题(谁先执行)。对于事件,你需要确保订阅事件的代码在由设计师生成的触发事件的代码之前运行。如果例如设计师生成构造函数,则这并不总是可能。而部分类则没有此类问题。

3
他们并不是“必需的”,但对于大规模应用程序而言,它们是期望的。广泛使用事件会导致智能UI反模式,其中业务逻辑与用户界面紧密耦合,而部分函数允许您更好地分离关注点。
这里是MSDN C#编程指南中有关部分方法的链接。 http://msdn.microsoft.com/en-us/library/wa80x488.aspx

3
编译器会在没有实现的情况下移除对部分方法的调用。如果使用事件的替代方法,监听器必须在运行时进行检查(它们还需要被存储等)。这使得部分方法更具性能,特别是当有许多潜在的“事件”,只有少数“监听器”被注册时。

0

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

部分类方法被引入到图像中,以扩展现有类,这些类您无法控制(属于框架或自动生成的一部分)

希望这可以帮助到您


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接