.NET委托类型的正确命名约定?

Joh*_*n K 76 .net delegates naming-conventions

按照惯例,类通常被命名为名词,动词之类的方法和形容词之类的接口.

委托的常见命名约定是什么?或者,当代表在类型和其他事物中列出时,区分其名称的好方法是什么?

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

一些想法:

delegate object ValueExtracting(object container);

delegate object ValueExtractor(object container);

delegate object ValueExtractionHandling(object container);

delegate object ValueExtractionHandler(object container);
Run Code Online (Sandbox Code Playgroud)

slu*_*ter 103

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

[Task][State]Handler - UITaskFinishedHandler

[Event]Handler - ControlLoadedHandler

[Function Name]Delegate - DoSomeWorkDelegate - 当我需要创建一个委托来调用另一个/新线程上的函数时使用

[Task]Callback - ContainerLoadedCallback - 当控件A启动一个操作时使用,控件B执行大部分工作和控件A已将依赖关系传递给控件B(即ControlA可能已经传递了一个UI容器以供ControlB填充并需要通知才能实际显示容器)

当你有一个使用大量多线程或异步WCF调用的项目时,最终会有很多代表浮动,所以采用一个至少对你有意义的标准是很重要的.

  • 不幸的是,“[函数名称]委托”违反了 CA1711。我喜欢使用“[Function Name]Func”或“[Function Name]Action”,这取决于它是否有返回类型。 (4认同)
  • @MelbourneDeveloper 告诉那些为 asp 创建了 [`RequestDelegate`](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.requestdelegate?view=aspnetcore-2.2) 的人。网络核心;-] (3认同)

Bor*_*nov 40

框架设计指南 - 我的命名年鉴,关于这个主题说如下:

√请将后缀"EventHandler"添加到事件中使用的代理名称中.
√请将后缀"Callback"添加到除用作事件处理程序的代理名称之外.
X不要将后缀"Delegate"添加到委托.

  • 有趣的是,MS说'不要将后缀"委托给代表",但在[本例](https://msdn.microsoft.com/en-us/library/ms173176.aspx)中,他们有一个名为的委托人`ProcessBookDelegate` ... (15认同)
  • @PadawanLondon 与 asp.net-core 中的 [`RequestDelegate`](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.requestdelegate?view=aspnetcore-2.2) 相同的故事- 一致性和编码约定就这么多了。我猜他们甚至不读他们自己的文档。 (2认同)

Kev*_*ler 15

由于委托是执行动作(动词)的东西,因此应该将委托命名为您将调用执行该动作的内容.以Converter<TInput, TOutput>为例.动词是转换.进行转换的事情称为转换器,因此是委托的名称.


Aar*_*ght 6

这取决于一些事情.

如果委托将用作事件,则应始终将其称为EventHandler子类型,例如:

public delegate void ValueExtractingEventHandler(object sender,
    ValueExtractingEventArgs e);
Run Code Online (Sandbox Code Playgroud)

如果它不是一个事件,那么MS编码指南(我似乎永远无法在Google上找到正确的副本)明确建议不要在委托名称包含"委托"或"处理程序"等字样,除非在特殊情况下EventHandler类型.

通常,代理应该以动作命名,这类似于ValueExtracting(如果代理在提取值之前发生)或ValueExtracted(在提取之后).

Func<T1, T2, ..., TResult>委托语法也变得越来越普遍,但除非你有4个或多个参数往里走,你并不需要声明自己在所有-只需使用现有的:

object ExtractObject(object source, Func<object, object> extractor);
Run Code Online (Sandbox Code Playgroud)

当委托被用作闭包时,此语法最佳.委托本身没有一个非常有趣的名称,但参数是一个代理名词(提取器,提供者,评估者,选择器等)

大多数代表使用符合上述类别中的一个,因此请确定使用哪个类别进行适当选择.