【问题标题】:What should I name my files with generic class definitions?我应该用通用类定义命名我的文件吗?
【发布时间】:2011-02-06 09:16:07
【问题描述】:

我正在编写几个都有泛型类型参数的类,但我需要重载这些类,因为在不同的场景中我需要不同数量的参数。基本上,我有

 public class MyGenericClass<T> { ... }
 public class MyGenericClass<T, K> { ... }
 public class MyGenericClass<T, K, L> { ... }
 // it could go on forever, but it won't...

我希望它们都在同一个命名空间中,但每个类都在一个源文件中。我应该给这些文件起什么名字?有最佳做法吗?

【问题讨论】:

  • 我认为甚至不可能创建具有相同名称但具有不同数量的通用参数的不同类。编辑:哎呀,这是 C#,而不是 Java。我怀疑你可以在 Java 中做到这一点,因为它必须以有趣的方式处理泛型类。
  • 微软不是在 4.0 中使用 Tuple 类做这件事吗?
  • 参见,例如 Tuple – 表示大小为 1 的元组 Tuple – 表示大小为 2 的元组 Tuple – 表示一个元组尺寸 3
  • 可能是 public class A { } public class A { } public class A { }
  • @Chris,他说的是 文件 名称,而不是类名称。具有不同数量泛型的多个类是完全合法的。

标签: c# generics filenames


【解决方案1】:

当出现这种情况时,我采用与 C# 泛型的 XML 文档 cmets 中使用的相同约定,即使用 { 和 } 而不是 &lt; 和 &gt;,因为尖括号不是XML 或文件名友好,但卷曲的。所以像:

MyClass{T}.cs

MyClass{T,K}.cs

如果你真的有很多参数,这作为命名方案可能会有点笨拙,所以我倾向于采用 CLR 惯例,即反引号后跟参数计数,例如

MyClass`1.cs

MyClass`2.cs

或者根据情况混合搭配两种方案。

【讨论】:

    【解决方案2】:

    我通常使用Classname.1.cs、Classname.2.cs等...其中数字是泛型参数的数量,类似于框架中的``1notation used in the framework documentation (and in XML documentation in your sourcecode). Sometimes you also have a class with no generic arguments (similar toICollectionandICollection`),以及正如预期的那样,文件名将只是类名。 与使用反引号相比,这样做的好处是文件名中不会包含任何无效字符。并非所有文件系统、版本控制系统、操作系统都允许名称中包含反引号。

    【讨论】:

      【解决方案3】:

      我会将它们全部放在同一个文件中,除非它们很大(通常它们不会很大,除了 Ts 最多的那个)。

      除了您在 .NET 框架指南中找到的内容之外,没有真正的命名类的最佳实践,因为它是编程创造性方面的一部分,不幸的是,SSCLI 只能追溯到 2.0,所以您找不到那里有很多帮助。

      【讨论】:

        【解决方案4】:

        我认为您不会在 C# 社区中找到太多的教条,即为同名的泛型类的每个变体提供单独的文件。我更喜欢只为您所描述的情况使用一个,尽管如果每个变体的代码都必须复杂/冗长,我可以看到您所提议的情况。一般来说,我只会使用相关类的名称作为文件名。

        如果我要将变体分离到单独的文件中,我可以看到使用 Michael 的解决方案,尽管这对于我们这些在命令行上使用 Unix 样式工具的人来说会有点痛苦,例如 Cygwin 或和Linux。我可能会使用下划线或不使用标点符号。或者后缀为 1P、2P、3P 之类的东西。

        【讨论】:

          【解决方案5】:

          我见过人们使用

          MyGenericClass`1, MyGenericClass`2 or MyGenericClass`3
          

          (数字为通用参数的个数)。

          我认为这就是你在类上调用 .ToString 时得到的 TypeName。

          【讨论】:

          • .ToString() 参数是迄今为止我在讨论中看到的最好的。除非第二天左右出现问题,否则我可能会这样做。
          • 同意。这也是代码覆盖结果中出现的情况。
          • 现在将此标记为我的“正确”答案,因为没有更多令人信服的论点出现。我认为文件以与.ToString() 相同的方式命名的事实确实使它成为最好的方法。 (.ToString() 使用的字符可能并非在所有地方都有效,这是一个不同的讨论......)
          • @Tomas 一开始我也对反引号感到怀疑,但与标准撇号不同的是,它几乎在任何地方都应该是一个有效字符。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-30
          • 2011-03-28
          • 2020-12-15
          • 1970-01-01
          • 2016-12-02
          • 2013-08-16
          • 1970-01-01
          相关资源
          最近更新 更多