通用类的文件名约定

我希望能够区分类的通用和常规(非通用)版本。 就像.NET框架一样,它是它的几个接口和集合类的通用和非通用版本。 ( 队列 , 队列(T) )

我通常喜欢遵循每个文件一个类的约定(如在Java中)。 命名包含单个generics类的文件是否有一个通用约定? 我主要感兴趣的是Windows(特别是NTFS),但是看起来好像是一个很好的约定(至less是一点点)。

在Microsoft,他们使用ClassNameOfT.cs

在查找其他人用于generics类文件名的约定之后,才发现这个问题。

最近我一直在使用ClassName[T].cs 。 我非常喜欢这个习俗,而且我认为它比其他人更好,原因如下:

  • types参数跳出你比微软惯例更多一点(例如, ClassNameOfT.cs )。
  • 它允许你有多个types参数没有太多的困惑: Dictionary[TKey, TValue].cs
  • 它不需要你创build任何特殊的文件夹,或者让你的generics类在一个特殊的命名空间中。 如果你只有一些generics类,那么拥有一个专门的命名空间是不现实的。

我从Boo的通用语法中借用了这个约定,虽然稍作修改(Boo使用了ClassName[of T] )。

一些开发者似乎有一个包含字母和下划线的文件名的恐惧症,但是一旦你可以认识到这个惯例似乎工作得非常好。

我看到这个话题已经在一年多的时间里被抛弃了,但是我仍然希望和大家分享一下我对这个公约的看法。

首先,具有多个具有相同名称但types参数数量不同的类并不总是向后兼容的情况。 当然,你不会经常看到它,但是.NET的新的Action和Func类只是这样devise的,而且我正在实现类似的东西。

为了清晰和可区分性,我使用下面的约定来指定给定types的通用参数的数量:

  • MyClass.cs
  • MyClass.T1.cs
  • MyClass.T2.cs

通过这种方式,我的文件名保持简短而又简单,同时仍然以一个简单的额外点(这是我的经验,一个普遍接受的事情在一个文件名中做的代价)清楚地传达类名称和不同数量的types参数看起来比逗号和其他非英文数字字符好得多,但这只是我猜测的一个问题)。 把types参数的名称(或首字母缩略词)只是延长文件名,而在这个级别上,我并不真正对types参数的实际名称感兴趣…

如果您正在运行Visual Studio 2008,请不要在通用文件名中使用重音符号。导致断点失败的一个已知问题是:

http://connect.microsoft.com/VisualStudio/feedback/details/343042/grave-accent-in-filename-causes-failure-to-recognize-target-language-breakpoints-fail

怎么样:

 Type.cs 

 TypeGeneric.cs 

每当我在过去做过这些事情时,我总是把这两种types放在一个非genericstypes的文件中作为文件名。 我认为这使事情变得非常清楚,因为.NET没有像Java那样每个文件都有一种types的约定/限制。

但是,如果你必须那么我会build议像我上面的东西,并使用后缀将使文件一起显示在任何按字母顺序的列表(解决scheme资源pipe理器,Windows资源pipe理器等)。

这是另一个想法:

 Type`1.cs 

这将允许您通过它们接受的genericstypes参数的数量来分解不同的genericstypes。 它只是一个想法,但我仍然认为将所有types放在一个文件中会更简单。

我可能会把它们放在文件夹中,而不是使用命名空间机制。 你可以比较System.Collections与System.Collections.Generic。 另一方面,如果类比generics更常见,也许最好指出那些不是generics。 那就是如果你真的想把generics类从其他类中分离出来的话。 就我个人而言,我通常不会那么做,因为我从中看不到实际的好处。

从迄今为止的答复来看,似乎没有达成共识。

在子名称空间(和子文件夹)中使用相同的文件名“generics”(如System.Collecctions.Generics)是一个选项。 但是创build一个新的命名空间并不总是可取的。

例如,在为了向后兼容而维护但是用ObsoleteAttribute标记的具有非generics类的现有名称空间中,最好将generics版本保存在相同的名称空间中。

我认为后缀是一个合理的路要走。 我已经习惯使用types参数作为后缀(如:MyClassT for MyClass <T>,或MyDictionaryKV for MyDictionary <K,V>。

我可能在项目中有两个文件夹,像Gereric,NonGeneric或类似的东西。 他们仍然可以在相同的命名空间,然后他们都可以有相同的文件名。 只是一个想法…

所有新的Microsoft类都使用generics。 在generics出现之前, QueueArrayList在那里。 generics是前进的方向。

每个单一类文件的约定是在类名之后命名文件名(不是通用的)。 对于MyClass,您将拥有MyClas.cs。 对于每个新的命名空间,您都需要创build一个新的文件夹。 这也是Visual Studio的工作原理。

我个人不会使用重音符号:

 Foo.cs Foo`1.cs 

原因很简单,我害怕重音。 它不仅有一个可怕的名字,但我不确定如何处理不同的文件系统,版本控制系统和url。 因此,我宁愿坚持常见的字母数字字符。

根据在GitHub上的search, NameOfT.cs似乎被用在ASP.NET Core MVC中。 12结果。 参考 。

在CoreFX中使用也有限。 3结果。 参考 。

例:

 Foo.cs FooOfT.cs