接口扩展方法的C#命名约定

Sar*_*els 34 .net extension-methods interface naming-conventions

我通常将我的C#接口命名为IThing.我正在创建一个扩展方法类IThing,但我不知道该命名它.一方面,调用它ThingExtensions似乎意味着它是某个类的扩展Thing类而不是IThing接口.当按字母顺序查看文件时,它还使扩展类与其扩展的接口分开.另一方面,命名它IThingExtensions使它看起来像是一个接口本身,而不是接口的扩展类.你会建议什么?

编辑: 没有一个Thing类实现IThing,以响应一些注释.

Jar*_*Par 30

我绝对喜欢的名字ThingExtensionsIThingExtensions.原因是大多数程序员I对类型的前缀意味着它是一个接口.这是一种非常常见的模式,也是.Net设计指南的一部分.

I为扩展方法案例添加前缀会破坏假设和既定准则.

基类库中也有优先权.大多数可用的扩展方法IEnumerable都包含在类型中Enumerable.

  • 我想象有一个名为`Thing`的类实现了'IThing`,因此如果它被称为'ThingExtensions`但是在'IThing`上工作会让人感到困惑.但是,@ Sarah Vessels没有具体说明...... (3认同)

Ree*_*sey 16

我个人会使用IThingExtensions.

从可用性的角度来看,最终用户永远不会看到这个类 - 它们只包含它的命名空间.如果命名空间是相同的IThing,那么无所谓 - 他们已经拥有它.

话虽这么说,我认为其实这些都是扩展任何IThing使IThingExtensions最清晰.如果你有一个Thing类,调用它ThingExtensions可能看起来很模糊(你是扩展接口还是实现本身?).

话虽如此,该框架使用了一种非常不同的方法.框架的方法是使用一个名为Thingextend 的类IThing.有关示例,请参阅Enumerable(extendsIEnumerable)和Queryable(extendsIQueryable).这也是一个非常好的选择.

  • 我仍然不喜欢这种方法,因为它违反了类型命名的设计准则。特别是如果它实际上是一个接口,则只在类型名称前加上 I。http://msdn.microsoft.com/en-us/library/ms229040.aspx (2认同)
  • @JaredPar:是的,但不幸的是,设计指南并没有任何关于命名扩展方法类的指导——他们实际上只是谈论何时使用它们(即:http://blogs.msdn.com/brada/archive/ 2009/01/12/framework-design-guidelines-extension-methods.aspx) 使用 Thing 是我的偏好,除非你正在制作一个 Thing 类——在这种情况下,ThingExtensions 变得混乱......希望会有官方指导这在某个时候。 (2认同)