注册到事件的命名方法

Jeh*_*hof 5 .net c# events naming-conventions

假设我有一个暴露以下事件的类:

public event EventHandler Closing
Run Code Online (Sandbox Code Playgroud)

如何命名注册到此事件的方法?您是否更喜欢遵循Visual Studio在为其生成的方法指定名称时使用的约定(又名.+ =,Tab,Tab)?例如:

private void TheClass_Closing( object sender, EventArgs e )
Run Code Online (Sandbox Code Playgroud)

或者您使用自己的风格来命名这些方法?

我已经尝试了不同的方式来命名这些方法(如TheClassClosing,HandleClosing等).但我没有找到一个好的风格来表明方法的意图是处理已注册的事件.我个人不喜欢Visual Studio用来生成方法名称的样式(下划线).

我知道注册的事件处理方法总是私有的,并且没有像引发事件的方法那样的命名约定(例如,OnClosing).

Gis*_*shu 5

根据处理程序实际执行的操作来命名它。

// event += event handler
saveButton.Click += SaveData();
startButton.Click += StartTheTimer();
Run Code Online (Sandbox Code Playgroud)

  • 我很高兴看到我不是唯一一个这样做的人。方法应该说明它们做了什么,而不是它们如何被使用。事件接线的工作就是让这一点变得清晰:) (2认同)

jer*_*jvl 4

两个常见的命名选项是在方法执行的操作之后:

theObject.Closing += SaveResults;
Run Code Online (Sandbox Code Playgroud)

或者在该方法处理之后:

theObject.Closing += ClosingHandler;
Run Code Online (Sandbox Code Playgroud)

哪个更可取实际上取决于上下文。

在第一种情况下,处理程序将要执行的操作一目了然,这使得注册处理程序的代码更具可读性……但是SaveResults单独查看处理程序,当调用它时并不一定很明显,除非事件参数有一个明显的名称(ClosingEventArgs或类似的名称)。

在第二种情况下,注册更加不透明(好吧,那么当发生时会发生什么Closing?),但另一方面,查看处理程序实现,会很明显发生了什么。

我想选择哪一个取决于你想要两者中哪一个更明显;注册的站点,或者处理程序的执行。

或者,您可以选择两种方法的邪恶组合:

theObject.Closing += ClosingHandlerSaveResults;
Run Code Online (Sandbox Code Playgroud)

现在注册站点和实现都同样明显,而且看起来都不是特别优雅(另外,它可能违反了 DRY 原则)。

根据记录,当theObject包含在与 的实现不同的作用域中时SaveResults,我更喜欢第一个命名方案;当我将处理程序连接到全部包含在同一类中的事件时,我更喜欢第二个方案。