具有相同名称的通用和非通用类型的约定

6

Task 是一个存在于泛型和非泛型形式的类的例子。泛型形式扩展了非泛型形式。

public class Task
{

}

public class Task<T> : Task
{

}

假设我正在实现类似的东西。通常,不同的类被放在不同的文件中,但由于它们具有相同的名称,这种情况不可能。

那么,在这种情况下应该遵循什么样的约定呢?是将两个类保留在同一个文件中,还是将通用类放在另一个文件中并使用不同的名称?


顺便提一下,这里有一个类似的问题:https://dev59.com/iXA75IYBdhLWcg3wxsNn - IronGeek
2
我通常将这两个类放在同一个文件中。原因是其中一个最终成为另一个类的包装器,因此代码很少。 - Eris
2个回答

8
尽管Microsoft没有公布处理此情况的标准方法,但他们将Task<TResult>放在与Task无关的文件中:非泛型类位于文件Task.cs中,而泛型类位于文件Future.cs中。同样,ExpressionExpression<TResult>位于不同的文件中(Expression.csLambdaExpression.cs)。看起来,这些类在文件中的放置逻辑是它们属于的其他类的逻辑归属。

3

我采用的惯例(并在我的工作场所鼓励)是将通用参数添加到文件名中。因此,例如,我们会为非泛型版本使用 Task.cs,而为泛型版本使用 Task(T).cs。这样做的原因主要是因为我们非常严格地执行每个文件一个类的规则。


如果你只有一个通用版本,你还会把它命名为Task(T).cs吗? - Gigi
总的来说,不需要,尽管如果我们这样做可能更有意义。目前,该规则仅在使用相同名称的通用类和非通用类时才起作用以消除歧义。 - Kyle
事实上,说实话,这种工作方式确实有点不一致。 - Gigi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接