代码之家  ›  专栏  ›  技术社区  ›  Waylon Flinn

泛型类的文件名约定

  •  46
  • Waylon Flinn  · 技术社区  · 16 年前

    我希望能够区分类的一般版本和常规(非一般)版本。与.NET框架的一些接口和集合类的通用和非通用版本非常相似。( Queue , Queue(T) )

    一般来说,我喜欢遵循每个文件一个类的约定(如Java)。对于包含单个泛型类的文件,是否有一个通用的命名约定?我主要对Windows(特别是NTFS)感兴趣,但似乎一个好的约定是(至少有一点)可移植的。

    11 回复  |  直到 7 年前
        1
  •  34
  •   Mark Cidade    16 年前

    在微软,他们使用 ClassNameOfT.cs .

        2
  •  40
  •   user22467    15 年前

    在寻找其他人对通用类文件名使用什么约定之后,才发现了这个问题。

    最近我一直在使用 ClassName[T].cs . 我真的很喜欢这个公约,我认为它比其他公约优越,原因如下:

    • 类型参数跳出来 只比他们做的多 Microsoft约定(例如, ClassNameOfT.cs )
    • 它允许你有多个 类型参数不太多 困惑: Dictionary[TKey, TValue].cs
    • 它不要求您创建任何特殊的文件夹,也不要求您在特殊的名称空间中拥有泛型类。如果您只有几个泛型类,那么为它们指定一个特殊的名称空间是不实际的。

    我借用了这个会议 Boo 的一般语法,尽管有轻微的修改(boo使用 ClassName[of T] )

    有些开发人员似乎对文件名有恐惧症,除了字母和下划线之外,文件名中除了字母和下划线之外什么都不包含,但一旦你能克服这种恐惧,这种约定就似乎非常有效。

        3
  •  9
  •   Wim.van.Gool    13 年前

    我看到这个话题一年多前就被抛弃了,但我还是想和大家分享一下我对这个大会的看法。

    首先,拥有多个名称相同但类型参数数量不同的类并不总是向后兼容的情况。当然,您不会经常看到它,但是.NET的新action类和func类就是这样设计的,我目前正在实现类似的东西。

    为了清晰和可区分性,我使用以下约定,仅指定给定类型的泛型参数的数量:

    • MyCase.CS
    • MyCase.T1.CS
    • MyCase.T2.CS

    这样,我的文件名保持简短,同时仍然清楚地传递类名和不同数量的类型参数,而代价是一个简单的额外点(在我的经验中,这是一个文件名中常见的操作,看起来比逗号和其他非字母数字字符要好得多,但这只是一个问题尝一尝。输入类型参数的名称(或首字母缩写)只会延长文件名,而在这个级别上,我对类型参数的实际名称并不感兴趣…

        4
  •  4
  •   anon    14 年前

    如果运行的是Visual Studio 2008,则不要在常规文件名中使用grave重音。它们存在一个已知问题,导致断点失败:

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

        5
  •  1
  •   tofi9    16 年前

    所有新的Microsoft类都使用泛型。这个 Queue ArrayList 在仿制药问世之前就有。仿制药是前进的道路。

    每个文件一个类的约定是在类名之后命名文件名(无论是否为泛型)。对于我的班级,你会得到myclas.cs。对于每个新的名称空间,您都需要创建一个新文件夹。这就是Visual Studio的工作原理。

        6
  •  1
  •   Andrew Hare    16 年前

    怎么样:

    Type.cs
    

    TypeGeneric.cs
    

    过去每当我这样做时,我总是将这两种类型放在一个文件中,文件名为非泛型类型。我认为这使得事情很清楚,因为.NET没有像Java一样对每个文件的一种类型进行限制/限制。

    但是如果你必须这样做,我会建议像我上面提到的那样,使用一个后缀将使文件显示在任何按字母顺序排列的列表中(解决方案资源管理器、Windows资源管理器等)。

    另一个想法是:

    Type`1.cs
    

    这将允许您根据它们接受的泛型类型参数的数目来划分不同的泛型类型。这只是一个想法,尽管我仍然认为将所有类型放在一个文件中会更简单。

        7
  •  1
  •   Fredrik Mörk    16 年前

    我可能会将它们放在文件夹中,然后使用名称空间机制。您可以将其与System.Collections和System.Collections.Generic进行比较。另一方面,如果类使用泛型比不使用泛型更常见,那么最好指出那些不使用泛型的类。如果您真的想将泛型类与其他类分离的话。就我个人而言,我通常不费心去做,因为我没有真正看到从中受益。

        8
  •  1
  •   to StackOverflow    16 年前

    从目前的反应来看,似乎还没有达成共识。

    在子命名空间(和子文件夹)中使用相同的文件名,“generics”(如system.collections.generics)是一个选项。但并不总是需要创建一个新的名称空间。

    例如,在具有非泛型类的现有命名空间中,为了向后兼容而维护这些类,但用obsoleteattribute标记,最好将泛型版本保留在同一命名空间中。

    我认为后缀是一种合理的方式。我采用了将类型参数用作后缀的惯例(例如:myClass用于myClass<t>,myDictionarykv用于myDictionary<k,v>。

        9
  •  1
  •   Fred    8 年前

    就我个人而言,我不会使用庄重的重音符号:

    Foo.cs
    Foo`1.cs
    

    原因很简单,我害怕那沉重的口音。它不仅有一个可怕的名字“____”,而且我不确定它将如何被不同的文件系统、版本控制系统和URL处理。因此,我更喜欢使用常见的字母数字字符。

    NameOfT.cs 根据在Github上的搜索,似乎在ASP.NET核心MVC中使用。12个结果。 Reference .

    也限制了在corefx中的使用。3个结果。 Reference .

    例子:

    Foo.cs
    FooOfT.cs
    
        10
  •  0
  •   BFree    16 年前

    我可能在项目中有两个文件夹,像gereric、nongeneric或类似的。它们仍然可以在同一个命名空间中,然后它们都可以具有相同的文件名。只是一个想法…

        11
  •  0
  •   Konrad    7 年前

    有时我也看到 ClassName{T}.cs 但通常都是这样命名的 ClassNameOfT.cs (就像微软之前提到的那样)

    EntityFrameworkCore项目(也是Microsoft的)使用 ClassName`.cs