gpt4 book ai didi

c# - C# 类订阅自己发布的事件的形式很差吗?

转载 作者:可可西里 更新时间:2023-11-01 08:40:59 25 4
gpt4 key购买 nike

我可能只是神经质,但我经常发现自己有类发布事件的情况,而且我发现从类本身(例如在构造函数中)订阅这个事件很方便,而不仅仅是订阅外部类。

这对我来说听起来很合理,但我忍不住觉得这是一种糟糕的做法,原因很简单,因为我总是面临这样的问题:“为什么不执行你在触发事件的代码中的事件处理程序?”

public class Button
{
public Button()
{
this.Click += someHandler; // bad practice?
}

public event EventHandler Click;

public void HandleInput()
{
if (someInputCondition)
{
// Perform necessary actions here rather than
// subscribing in the constructor?
this.Click(this, ...);
}
}
}

订阅您自己的事件有什么缺点吗?

最佳答案

This sounds reasonable to me, but I can't help the nagging feeling that it's a poor practice, for the simple reason that I'm always faced with the question: "Why not perform the actions that you'd provide in the event handler in the code which fires the event?"

要回答这个问题,请考虑部分类场景。假设您有一个基类型 B。您运行一个自动化工具,通过将 B 扩展到派生类 D 来装饰 B。您的工具生成一个部分类,以便使用 D 的开发人员可以根据自己的目的进一步自定义它。

在这种情况下,当 D 的机器生成端引发由 B 或 D 的机器生成端声明的事件时,D 的用户编写端想要注册以被调用似乎是完全合理的.

这就是我们在多年前设计 VSTO 时遇到的情况。事实证明,在 C# 中执行此操作并不困难,但在 VB 中使其全部工作却非常棘手。我相信 VB 已经对他们的事件订阅模型进行了一些调整,以使这更容易。

就是说:如果你能避免这种情况,我会的。如果您只是为内部订阅创建一个事件,那似乎是一种糟糕的代码味道。 C# 3 中的部分方法在这里大有帮助,因为它们使机器生成端可以轻松且低成本地调用用户生成端的小通知函数,而不必费心发布事件。

关于c# - C# 类订阅自己发布的事件的形式很差吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com