注册到事件的命名方法

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

public event EventHandler Closing 

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

 private void TheClass_Closing( object sender, EventArgs e ) 

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

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

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

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

 theObject.Closing += SaveResults; 

或者在该方法处理之后:

 theObject.Closing += ClosingHandler; 

哪个更好取决于上下文。

在第一种情况下,它会立即清楚处理程序将要执行的操作,这使得注册处理程序的代码更具可读性……但是SaveResults查看处理程序SaveResults ,它将不会是显而易见的。调用,除非事件参数有明显的名称( ClosingEventArgs或其他一些)。

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

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

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

 theObject.Closing += ClosingHandlerSaveResults; 

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

对于记录,我更喜欢第一个命名方案,当theObject包含在与SaveResults的实现不同的范围内时,我更喜欢第二个方案,当我将处理程序连接到同一类中包含的事件时。

在处理程序实际执行之后命名它。

 // event += event handler saveButton.Click += SaveData(); startButton.Click += StartTheTimer(); 

我将我的事件处理程序命名为与Visual Studio创建的事件处理程序类似(您提到的+,=,选项卡,选项卡)。 我尝试在我的代码中保持我的命名一致,并且我知道我将至少在某些时候使用VS自动创建器创建处理程序。

下划线不打扰我。

也许:OnObjectNameEventName,例如

 private void OnTheClassClosing(object sender, EventArgs e) 

这与内部事件方法匹配,并且通过添加对象名称,它应该有助于区分,此外,引发事件的方法本质上是内部事件处理程序

用户单击表单,形成调用OnClicked,执行其操作,然后引发Clicked事件,从我的角度来看,这只是自然的。