代码之家  ›  专栏  ›  技术社区  ›  John K

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

  •  73
  • John K  · 技术社区  · 15 年前

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

    委托的常见命名约定是什么?或者,当委托在类型和其他事物之间列出时,有什么好方法可以区分它的名称呢?

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

    一些想法:

    delegate object ValueExtracting(object container);
    
    delegate object ValueExtractor(object container);
    
    delegate object ValueExtractionHandling(object container);
    
    delegate object ValueExtractionHandler(object container);
    
    7 回复  |  直到 8 年前
        1
  •  97
  •   slugster Joey Cai    11 年前

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

    [Task][State]Handler - 乌塔斯肯芬什达德勒

    [Event]Handler - 控制加载处理程序

    [Function Name]Delegate - DosomeWork代表 -在需要创建委托以在不同/新线程上调用函数时使用

    [Task]Callback - 集装箱装载回收 -当控件A启动控件B完成大部分工作的操作时使用,并且控件A已将依赖项传递给控件B(即,ControlA可能已传递了一个UI容器,控件B将填充该容器,并且需要通知才能实际显示该容器)

    当您有一个项目使用了大量多线程或异步WCF调用时,您可能最终会得到大量浮动的委托,因此采用至少对您有意义的标准非常重要。

        2
  •  36
  •   Borislav Ivanov    10 年前

    Framework Design Guidelines -给我的命名年鉴,说 the following 关于这个话题:

    _在使用的委托名称中添加后缀“eventhandler” 在事件中。
    _添加后缀“callback”到其他代表的姓名 而不是用作事件处理程序的。
    X不要在代理中添加后缀“delegate”。

        3
  •  14
  •   Kevin Kibler    15 年前

    因为委托是执行动作(动词)的东西,所以委托应该被命名为执行动作的东西。采取 Converter<TInput, TOutput> 例如。动词是 转换 . 进行转换的对象称为 转换器 ,因此是委托的名称。

        4
  •  6
  •   Aaronaught    15 年前

    这取决于一些事情。

    如果要将委托用作事件,则应 总是 被称为 EventHandler 子类型,例如:

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

    如果这不是一个事件,那么微软的编码准则(我似乎在谷歌上找不到它的正确副本)明确推荐 反对 在委托名称中包含“委托”或“处理程序”等词, 除了 在特殊情况下 埃文森德勒 类型。

    通常,委托的名称应以 行动 ,应该是 ValueExtracting (如果委托发生在提取值之前)或 ValueExtracted (提取后)。

    这个 Func<T1, T2, ..., TResult> 委托语法也变得越来越常见,但是除非有4个或更多的参数进入其中,否则根本不需要声明自己的参数-只需使用现有的参数:

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

    当委托用作 关闭 . 委托本身没有非常有趣的名称,但参数是 代理名词 (提取器、提供者、评估器、选择器等)

    大多数委托的用法都适合于上述类别之一,所以要弄清楚它被用于适当地选择哪个类别。

        5
  •  3
  •   MikeP    15 年前

    我从来没有想过,主要是因为我只使用了 EventHandler<T> , Func<T> Action<T> 超负荷和从不费心定义我自己。我可能会从你列出的那些人中选择ValueExtractor。这使得它听起来更像一个对象,当您调用它时,您将使用该对象来执行操作。例如:

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

    此外,大多数内置委托的命名方式也类似于名词。如果有疑问,请遵循.NET框架。

        6
  •  0
  •   mati    15 年前

    我会去价值提取……
    我从来没想过为什么,但我猜是因为你在存储一个操作,它应该是一个名词。 严格来说,这不是手术,我知道…

        7
  •  0
  •   Sam Harwell    15 年前

    基于 Enumerable.Sum 我会把代表作为 Func<object, object> 并命名参数 selector :

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

    如果你必须自己做代表,我同意 ValueExtractor 因为这是最具描述性的名字。