适用于.NET委托types的命名约定?

按照惯例,类通常被命名为名词,动词和接口(如形容词)。

代表的通用命名约定是什么? 或者当代表被列入types和其他事物时,区分它的名字的好方法是什么?

我的直接假设是命名委托更可能是一个形容词,因为单个方法接口通常可以用委托来替代。

一些想法:

delegate object ValueExtracting(object container); delegate object ValueExtractor(object container); delegate object ValueExtractionHandling(object container); delegate object ValueExtractionHandler(object container); 

我个人使用几种不同的模式:

[Task][State]HandlerUITaskFinishedHandler

[Event]HandlerControlLoadedHandler

[Function Name]DelegateDoSomeWorkDelegate – 当我需要创build一个委托调用一个不同的/新的线程函数时使用

[Task]CallbackContainerLoadedCallback – 当控件A启动一个控件B完成大部分工作和控件的操作时,A已经传递一个依赖项来控制B(即,ControlA可能已经传递了一个ControlB的UI容器来填充并需要通知实际显示容器)

当你有一个使用大量multithreading或asynchronousWCF调用的项目时,最终可能会有大量的委托,所以采用一个至less对你有意义的标准是非常重要的。

框架devise指南 – 为我命名的年鉴,关于这个话题说:

√请将后缀“EventHandler”添加到事件中使用的代表名称。
√请将后缀“Callback”添加到除用作事件处理程序的代理名称之外。
X请勿将后缀“委托”添加到委托。

由于委托是执行动作(动词)的东西,所以委托应该被命名为执行该动作的东西。 以Converter<TInput, TOutput>为例。 动词是Convert 。 转换的东西叫做转换器 ,因此是委托的名字。

这取决于一些事情。

如果委托将被用作事件,则应始终将其引用为EventHandler子types,例如:

 public delegate void ValueExtractingEventHandler(object sender, ValueExtractingEventArgs e); 

如果这不是一个事件,那么MS编码准则(我从来没有在Google上find正确的副本)明确build议不要在委托人名称包含像“委托”或“处理程序”这样的词, 除非特殊情况EventHandlertypes。

通常情况下,代表应该按行动来命名,如ValueExtracting (如果委托在提取值之前发生)或ValueExtracted (提取之后)。

Func<T1, T2, ..., TResult>委托语法也变得越来越普遍,除非你有4个或更多的参数进入它,你根本不需要声明自己的 – 只要使用现有的:

 object ExtractObject(object source, Func<object, object> extractor); 

当委托被用作闭包时,这个语法是最好的。 代表本身没有一个非常有趣的名字,但是参数是一个代理名词 (提取器,提供者,评估者,select者等)

大多数代表用法适合上述类别之一,因此找出适当select哪一个用于select。

我从来没有想过,主要是因为我只是使用EventHandler<T>Func<T>Action<T>重载之一,从来不打扰我自己定义。 我可能会select你列出的ValueExtractor。 这使得它听起来更像一个对象,当你调用它时,你将使用该对象来执行一个动作。 例如:

 ValueExtractor extractor += Blah; var value = extractor(data); 

另外,大多数内置的委托也被命名为名词。 如有疑问,请遵循.NET框架。

我会去ValueExtraction ..
我从来没有想过为什么,但我猜是因为你存储的操作,它应该是一个名词..严格来说这不是一个操作,我知道…

基于Enumerable.Sum ,我将代理作为Func<object, object>传递给参数selector

 void Foo(Func<object, object> selector) ... 

如果你不得不为自己的委托,我会使用ValueExtractor因为这是最具描述性的名字。