C# 注册到事件的命名方法

C# 注册到事件的命名方法,c#,.net,events,naming-conventions,C#,.net,Events,Naming Conventions,假设我有一个公开以下事件的类: public event EventHandler Closing 注册到此事件的方法应如何命名?当VisualStudio为其生成的方法指定名称时,您是否更愿意遵循VisualStudio使用的约定(aka.+=,Tab,Tab)?例如: private void TheClass_Closing( object sender, EventArgs e ) 或者您是否使用自己的样式命名这些方法 我尝试了不同的方法来命名这些方法(比如TheClassClosi

假设我有一个公开以下事件的类:

public event EventHandler Closing
注册到此事件的方法应如何命名?当VisualStudio为其生成的方法指定名称时,您是否更愿意遵循VisualStudio使用的约定(aka.+=,Tab,Tab)?例如:

private void TheClass_Closing( object sender, EventArgs e )
或者您是否使用自己的样式命名这些方法

我尝试了不同的方法来命名这些方法(比如
TheClassClosing
HandleClosing
,等等)。但是我还没有找到一个好的样式来表明方法的目的是处理已注册的事件。我个人不喜欢VisualStudio用来生成方法名的样式(下划线)


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

我将事件处理程序命名为类似于Visual Studio创建的事件处理程序(您提到的+,=,tab,tab)。我试图在代码中保持命名的一致性,我知道我至少会在某些时候使用VS auto creator创建处理程序


下划线并不困扰我。

也许:OnObjectNameEventName,例如

private void OnTheClassClosing(object sender, EventArgs e)
这与内部事件方法相匹配,并且添加了对象名,这将有助于区分引发事件的方法本质上是内部事件处理程序


用户单击表单,表单调用OnClicked,执行它的操作,然后引发单击事件,在我看来这是很自然的。

按照处理程序实际执行的操作命名它

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

命名的两个常见选项是按照方法的功能进行命名:

theObject.Closing += SaveResults;
或者,在方法处理之后:

theObject.Closing += ClosingHandler;
哪一个更好实际上取决于上下文

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

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

我想选择哪一个取决于你想在这两个问题中表现得更明显;注册的站点,或处理程序的实现

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

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


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

我很高兴看到我不是唯一这样做的人。方法应该说明它们是做什么的,而不是如何使用它们。事件连线的工作就是要弄清楚这一点:)@DavidRR:这是关于如何命名代理的指导——这在当今的
EventHandler
中很少有关联。我当然不想为所有创建的事件都使用单独的委托类型。OP的问题不是询问如何命名代理,因为他们使用的是
EventHandler
。基本上,我认为你的回答并不是对被问到的问题的回答……为了给Jon的评论提供背景,Jon的评论是对我删除的答案的回应,微软确实提供了指导。但是本文中使用的术语“事件处理程序”与订阅(注册)事件的方法不同。由于MFC,“OnSomeEvent”样式在许多程序员(包括我自己)中根深蒂固。不幸的是,微软决定将其含义改为“发送事件”而不是“接收事件”,这使得许多.net代码不必要地混淆了。我现在使用RaiseSomeEvent发送事件,并采用了令人讨厌但清晰的Sender_EventName()约定。如果一个事件处理程序附加到多个发件人,我会使用Many_EventName()。@Jason:那么当您决定附加到另一个发件人时,您必须重命名您的方法吗?不过我喜欢RaiseMeetive的名字。。。也许我会开始使用它而不是在某个事件上。。。总觉得后者有点。。。错…虽然在这个问题中使用了动词“register”,但Microsoft经常使用这个动词