适用于.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]Handler
– UITaskFinishedHandler
[Event]Handler
– ControlLoadedHandler
[Function Name]Delegate
– DoSomeWorkDelegate – 当我需要创build一个委托调用一个不同的/新的线程函数时使用
[Task]Callback
– ContainerLoadedCallback – 当控件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议不要在委托人名称中包含像“委托”或“处理程序”这样的词, 除非特殊情况EventHandler
types。
通常情况下,代表应该按行动来命名,如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
因为这是最具描述性的名字。
- 如何使一个窗口始终保持在.Net的顶部?
- unit testing构造函数是否很重要?
- 我怎样才能部署一个使用ODAC的.NET应用程序,而无需将整个组件安装到用户?
- 我可以做什么来解决在SQL Server Compact Edition数据库上的LINQ to SQL中的“行未find或更改”exception?
- Linq:“或”相当于Where()
- C#中的重入锁
- 当我设置IIS池的LoadUserProfile时究竟发生了什么?
- 在ASP.NET MVC 4中使用自定义数据库模式的SimpleMembership
- Newtonsoft.Json.DeserializeObject抛出什么exception?