gpt4 book ai didi

C#:显式调用事件处理程序真的是 "a good thing to do"吗?

转载 作者:bug小助手 更新时间:2023-10-28 10:46:23 26 4
gpt4 key购买 nike

这个问题与 C# 有关,但也可能适用于其他语言。我对使用如下代码持保留态度:

using System.Windows.Forms;

class MyForm : Form
{
private Timer myTimer;
private Button myButton;

public MyForm()
{
// Initialize the components, etc.

myTimer.Tick += new EventHandler( myTimer_Tick );
myButton.Click += new EventHandler( myButton_Click );

myTimer.Start();
}

private void myTimer_Tick( object sender, EventArgs eventArgs )
{
myTimer.Stop();
// also, I see a lot of usage of
// Timer.Enabled = true/false instead of -^
myButton_Click( this, ea /* or event EventArgs.Empty, or null */ );
return;
}

private void myButton_Click( object sender, EventArgs eventArgs )
{
// do a lot of stuff, with lots of logic that doesn't even use the
// state of the eventArgs
return;
}
}

只有我一个人吗,上面的风格是我最讨厌的?是否还有其他人喜欢将事件处理与函数的工作负载分离,甚至将复杂的例程分离到单独的函数中?

甚至有公认的风格吗?我觉得 C# 中的事件处理所具有的任何表现力和灵 active 都可能会因为这样的样式而丢失。我觉得如果您有一个表示“已单击按钮”的方法,则仅应在单击按钮时调用它。

对于这样写的人,我想说:如果您坚持使用 EventHandler 方法来处理您的计时器滴答声和按钮单击,则将其命名为 button_Click 以外的其他名称——也许是“handleUserEvent(object发件人,EventArgs eventArgs )".

实际上,问题是,是否有任何广泛使用的样式指南支持或阻止上述使用?

最佳答案

这绝对不是“个人喜好”。对于如何编写结构良好、可维护、可重用和可理解的代码,有一种清晰、易于理解的方法。代码中的每个方法都应该封装一个可重用的功能。你的代码结构应该是:

void ButtonClickEventHandler(...)
{
UserData userData = //determine user data from event data
DoUserThing(userData);
}

void DoUserThing(UserData userData)
{
//do stuff
}

void SomeOtherMethod()
{
UserData userData = //get userdata from some other source
DoUserThing(userData);
}

(这是一个非常松散的例子。在正确的应用程序中,所有内容都应该是 separated into different classes by concern。)

关于C#:显式调用事件处理程序真的是 "a good thing to do"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984270/

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