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

Convention for generic and non-generic types with same name

Task 是以通用和非通用形式存在的 class 的示例。通用形式扩展了非通用形式。

public class Task
{

}

public class Task<T> : Task
{

}

假设我正在自己实现类似的东西。通常,约定是将不同的 class 放在不同的文件中。由于他们同名,这里不可能。

这种情况的惯例是什么?将两个 class 放在同一个文件中,或者将通用 class 放在不同的文件中,但名称不同?

虽然 Microsoft 没有发布处理这种情况的标准方法,但他们将 Task<TResult> 放在不同的文件中,名称与 Task 无关:非通用 class 在文件 Task.cs, while generic one is in the file Future.cs.

同样,ExpressionExpression<TResult> 位于不同的文件 (Expression.cs and LambdaExpression.cs)。

在文件中放置 classes 的逻辑似乎是 class 与它在逻辑上属于的其他 classes 一起。

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