这个问题与 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。)
我是一名优秀的程序员,十分优秀!