我正在编写几个都有泛型类型参数的类,但是我需要重载类,因为在不同的场景中我需要不同数量的参数。基本上,我有
public class MyGenericClass<T> { ... }
public class MyGenericClass<T, K> { ... }
public class MyGenericClass<T, K, L> { ... }
// it could go on forever, but it won't...
我希望它们都在同一个命名空间中,但每个类在一个源文件中。我该怎么命名文件?有最好的做法吗?
我见过人们用
MyGenericClass`1, MyGenericClass`2 or MyGenericClass`3
(数字是通用参数的数量)。
我认为当你在类上调用.ToString时,你得到的是TypeName。
出现这种情况时,我采用了与C#泛型的XML文档注释中使用的相同约定 {
和 }
代替 <
和 >
因为尖括号在XML或文件名中都不友好,但是卷曲的是。所以类似于:
MyClass的横置的.cs
MyClass的{T,K}的.cs
如果你真的有很多参数,那么作为命名方案可能会有点笨拙,所以我倾向于采用反引号的CLR约定,然后是参数计数,例如:
MyClass`1.cs
MyClass`2.cs
或者根据情况混合搭配两种方案。
我认为你不会在C#社区找到很多教条,他们偏爱具有相同名称的泛型类的每个变体的单独文件;我更喜欢在你描述的情况下使用一个,但是如果代码对于每个变体都必须复杂/冗长,我可以看到你提出的建议。一般来说,我只是使用相关类的名称作为文件名。
如果我要将变体分成单独的文件,我可以看到使用Michael的解决方案,尽管对于我们这些在命令行中使用Unix风格工具的人来说会有点痛苦,例如,Cygwin或AndLinux。我可能会使用下划线或没有标点符号。或者像1P,2P,3P这样的后缀。
我将它们全部放在同一个文件中,除非它们很大(通常它们不会,除了Ts最多的那个)。
除了你在.NET框架指南中找到的内容之外,命名类并没有真正的最佳实践,因为它是编程创意方面的一部分,不幸的是SSCLI只回到2.0,所以你在那里找不到多少帮助。
我经常使用 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 to
ICollection的and
ICOLlection`在框架中),文件名将只是类名,正如预期的那样。
与使用反引号相比,这样做的好处是文件名中不会包含任何无效字符。并非所有文件系统,版本控制系统,操作系统都允许在名称中使用反引号字符。