我正在学习 C# 中的事件/委托。我可以询问您对我选择的命名/编码风格(摘自《Head First C#》一书)的看法吗?
明天我要教一个朋友这个问题,并试图想出最优雅的方式来解释这些概念。 (认为理解一门学科的最好方法就是尝试并教授它!)
class Program
{
static void Main()
{
// setup the metronome and make sure the EventHandler delegate is ready
Metronome metronome = new Metronome();
// wires up the metronome_Tick method to the EventHandler delegate
Listener listener = new Listener(metronome);
metronome.OnTick();
}
}
public class Metronome
{
// a delegate
// so every time Tick is called, the runtime calls another method
// in this case Listener.metronome_Tick
public event EventHandler Tick;
public void OnTick()
{
while (true)
{
Thread.Sleep(2000);
// because using EventHandler delegate, need to include the sending object and eventargs
// although we are not using them
Tick(this, EventArgs.Empty);
}
}
}
public class Listener
{
public Listener(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("Heard it");
}
}
注:代码重构自http://www.codeproject.com/KB/cs/simplesteventexample.aspx http://www.codeproject.com/KB/cs/simplesteventexample.aspx
Microsoft 实际上已经编写了一套广泛的命名指南并将其放入 MSDN 库中。您可以在这里找到这些文章:命名指南 https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-guidelines
除了一般的大写准则外,以下是页面上“事件”的内容类型成员的名称 https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members#names-of-events:
✔️ 请用动词或动词短语来命名事件。
例子包括Clicked
, Painting
, DroppedDown
, 等等。
✔️ 请使用现在时和过去时为事件命名,并带有前后的概念。
例如,在窗口关闭之前引发的关闭事件将被调用Closing
,并且在窗口关闭后引发的一个将被调用Closed
.
❌ 不要使用“之前”或“之后”前缀和后缀来表示事件之前和之后。如前所述使用现在时和过去时。
✔️ DO 使用“EventHandler”后缀命名事件处理程序(用作事件类型的委托),如以下示例所示:
public delegate void ClickedEventHandler(object sender, ClickedEventArgs e);
✔️ 请使用两个名为sender
and e
在事件处理程序中。
sender 参数表示引发事件的对象。发送者参数通常是类型object
,即使可以采用更具体的类型。
✔️ 请使用“EventArgs”后缀命名事件参数类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)