问与答 c#-通用类文件名约定

abbott · 2020-02-22 08:27:35 · 热度: 11

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

我通常喜欢遵循每个文件一个类的约定(如Java)。 命名包含单个通用类的文件是否存在通用约定? 我对Windows(尤其是NTFS)最感兴趣,但是似乎一个好的约定是(至少一点)可移植的。

共收到 11 条回复
elbert #1 · 2020-02-22 08:27:35

在寻找其他人对通用类文件名使用哪些约定后才发现此问题。

最近,我一直在使用ClassName[of T]。我真的很喜欢这个约定,并且出于以下原因,我认为它优于其他约定:

  • 类型参数对您很重要比他们所做的更多Microsoft约定(例如,ClassName[of T])。
  • 它可以让您拥有多个类型参数不要太多困惑:ClassName[of T]
  • 它不需要您创建任何特殊的文件夹,也不需要您将通用类放在特殊的命名空间中。 如果只有几个泛型类,那么为它们专用的特殊名称空间是不切实际的。

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

一些开发人员似乎对文件名有恐惧症,除了字母和下划线之外,文件名不包含任何其他内容,但是一旦您可以通过,该约定似乎就可以很好地工作了。

aubree #2 · 2020-02-22 08:27:36

在Microsoft,他们使用ClassNameOfT.cs

ramon #3 · 2020-02-22 08:27:37

我看到这个话题已被放弃一年多了,但是我仍然想就这个公约发表我的看法。

首先,拥有多个具有相同名称但仅类型参数不同的类并不总是向后兼容的情况。 当然,您不会经常看到它,但是.NET的新Action-和Func类只是以这种方式设计的,而我目前正在实现类似的功能。

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

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

这样,我的文件名既简短又简单,同时仍然清晰地传达了类名和不同数量的类型参数,但以一个简单的额外的点为代价(根据我的经验,在文件名和 看起来比逗号和其他非字母数字的字符好得多,但这只是我的品味问题)。 放置类型参数的名称(或首字母缩写词)只会延长文件名,而在这个级别上,我对类型参数的实际名称并不真正感兴趣……

fredrick #4 · 2020-02-22 08:27:39

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

[HTTP://connect.Microsoft.com/visual studio/feedback/details/343042/grave-accent-in-filename-causes-failure-to-recognize-target-language-breakpoints-fail]

tarek #5 · 2020-02-22 08:27:40

所有新的Microsoft类都使用泛型。 QueueArrayList在泛型问世之前就已经存在。 泛型是前进的道路。

每个文件一个类的约定是在文件名(无论是否通用)之后命名文件名。 对于MyClass,您将拥有MyClas.cs。 对于每个新的名称空间,您都需要创建一个新文件夹。 这也是Visual Studio的工作方式。

jerrold #6 · 2020-02-22 08:27:41

怎么样:

Type.cs

TypeGeneric.cs

过去,无论何时执行此操作,我都总是将这两种类型都放在一个文件中,并且将非通用类型作为文件名。 我认为这很清楚,因为.NET对每个文件的一种类型都没有像Java那样的约定/限制。

但是,如果您必须这样做,我建议使用上面类似的内容,并使用后缀将使文件一起显示在任何字母顺序的列表中(Solution Explorer,Windows Explorer等)。

这是另一个想法:

Type`1.cs

这将使您可以按接受的通用类型参数的数量来划分不同的通用类型。 尽管只是个想法,但我仍然认为将所有类型放入一个文件会更简单。

carman #7 · 2020-02-22 08:27:42

我可能会将它们放在文件夹中,而改用命名空间机制。 您可以将System.Collections与System.Collections.Generic进行比较。 另一方面,如果类使用泛型比不常见的话,也许最好指出不使用泛型的类。 那就是如果您真的想将泛型类与其他类分开。 就我个人而言,我通常不介意这样做,因为我并没有真正从中受益。

fabian #8 · 2020-02-22 08:27:43

到目前为止,似乎还没有达成共识。

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

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

我认为后缀是合理的选择。 我采用了将类型参数用作后缀的约定(因此:MyClassT用于MyClass <T>,或MyDictionaryKV用于MyDictionary <K,V>。

terrill #9 · 2020-02-22 08:27:44

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

Foo.cs
Foo`1.cs

出于简单的原因,我害怕重音。 它不仅有一个可怕的名称👻😨😱,而且我不确定其他文件系统,版本控制系统和URL中将如何处理它。 因此,我希望坚持使用常见的字母数字字符。

根据GitHub上的搜索,似乎在ASP.NET Core中使用了NameOfT.cs。 19个结果。 参考。

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

例:

Foo.cs
FooOfT.cs
saxon #10 · 2020-02-22 08:27:45

我可能在项目中有两个文件夹,例如Gereric,NonGeneric或类似的文件夹。 它们仍然可以位于相同的名称空间中,然后它们都可以具有相同的文件名。 只是一个想法...

varghese #11 · 2020-02-22 08:27:46

有时我还会看到ClassName{T}.cs,但通常将其命名为ClassName`.cs(就像Microsoft在使用它之前提到的那样)

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册