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).
根据处理程序实际执行的操作来命名它。
// event += event handler
saveButton.Click += SaveData();
startButton.Click += StartTheTimer();
Run Code Online (Sandbox Code Playgroud)
两个常见的命名选项是在方法执行的操作之后:
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,我更喜欢第一个命名方案;当我将处理程序连接到全部包含在同一类中的事件时,我更喜欢第二个方案。
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |