按照惯例,类通常被命名为名词,动词之类的方法和形容词之类的接口。
委托的常见命名约定是什么?或者,当代表在类型和其他事物中列出时,区分其名称的好方法是什么?
我的直接假设是将代理命名为形容词,因为单个方法接口通常可以替换为委托。
一些想法:
delegate object ValueExtracting(object container);
delegate object ValueExtractor(object container);
delegate object ValueExtractionHandling(object container);
delegate object ValueExtractionHandler(object container);
答案 0 :(得分:98)
我个人使用了几种不同的模式:
[Task][State]Handler
- UITaskFinishedHandler
[Event]Handler
- ControlLoadedHandler
[Function Name]Delegate
- DoSomeWorkDelegate - 当我需要创建一个委托来调用另一个/新线程上的函数时使用
[Task]Callback
- ContainerLoadedCallback - 当控件A启动一个操作时使用,控件B执行大部分工作并且控件A已将依赖关系传递给控件B(即ControlA可能已通过一个UI容器,用于ControlB填充并需要通知以实际显示容器)
当你有一个使用大量多线程或异步WCF调用的项目时,最终会有很多代表浮动,所以采用一个至少对你有意义的标准是很重要的。
答案 1 :(得分:37)
Framework Design Guidelines - 我的命名年鉴,the following就此主题说:
√请添加后缀" EventHandler"到使用的代表的名称 在事件中。
√请添加后缀" Callback"代表其他人的名字 而不是那些用作事件处理程序的人。
X不要添加后缀"代表"给代表。
答案 2 :(得分:15)
由于委托是执行动作(动词)的东西,因此应该将委托命名为您将执行该动作的内容。以Converter<TInput, TOutput>
为例。动词是转换。进行转换的事情称为转换器,因此是委托的名称。
答案 3 :(得分:6)
这取决于一些事情。
如果委托将用作事件,则始终应被称为EventHandler
子类型,例如:
public delegate void ValueExtractingEventHandler(object sender,
ValueExtractingEventArgs e);
如果它不是一个事件,那么MS编码指南(我似乎永远无法在Google上找到正确的副本)明确建议反对,包括“委托”或“处理程序”等字样在EventHandler
类型的特殊情况下,代理名称除了。
通常,代理应以 actions 命名,这类似于ValueExtracting
(如果代理在提取值之前发生)或ValueExtracted
(提取之后)。
Func<T1, T2, ..., TResult>
委托语法也变得越来越普遍,但除非您有4个或更多参数,否则您根本不需要声明自己 - 只需使用现有的:
object ExtractObject(object source, Func<object, object> extractor);
当委托用作闭包时,此语法最佳。委托本身没有一个非常有趣的名称,但参数是代理名词(提取器,提供者,评估者,选择器等)
大多数代表用法都符合上述类别中的一个,因此请确定使用哪个类别进行适当选择。
答案 4 :(得分:3)
我从未想过这件事,主要是因为我只是使用EventHandler<T>
,Func<T>
或Action<T>
重载中的一个,而且从不打扰定义我自己的重载。我可能会从您列出的那些中选择ValueExtractor。这使它听起来更像是一个对象,当你调用它时,你将使用该对象来执行一个动作。例如:
ValueExtractor extractor += Blah;
var value = extractor(data);
此外,大多数内置委托也被命名为名词。如有疑问,请遵循.NET框架。
答案 5 :(得分:0)
我会选择ValueExtraction ..
我从来没有想过为什么,但我想因为你正在存储一个操作,它应该是一个名词..
严格来说,这不是一项行动,我知道......
答案 6 :(得分:0)
根据Enumerable.Sum
,我将代理作为Func<object, object>
传递,并将参数命名为selector
:
void Foo(Func<object, object> selector) ...
如果你必须为自己制作代表,我会选择ValueExtractor
,因为这是它最具描述性的名称。
答案 7 :(得分:0)
对于事件(带有委托),Windows窗体使用以下约定:
委托:
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
事件:
public event MouseEventHandler MouseClick;
事件监听器:
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseClick);