【问题标题】:Convention for generic and non-generic types with same name具有相同名称的泛型和非泛型类型的约定
【发布时间】:2015-12-26 00:50:48
【问题描述】:

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

public class Task
{

}

public class Task<T> : Task
{

}

假设我自己正在实施类似的东西。通常,约定是将不同的类放在不同的文件中。由于它们具有相同的名称,因此这里不可能。

这种场景的约定是什么?将两个类放在同一个文件中,还是将泛型类放在不同的文件中,但名称不同?

【问题讨论】:

  • FWIW,这是一个类似的问题:stackoverflow.com/questions/3108189/…
  • 我通常将两个类放在同一个文件中。原因是其中一个最终成为另一个的包装器,因此代码最少。

标签: c# generics convention


【解决方案1】:

虽然微软没有发布处理这种情况的标准方法,但他们将Task&lt;TResult&gt;放在了不同的文件中,名称与Task无关:非泛型类在文件Task.cs中,而通用的在文件Future.cs中。

同样,ExpressionExpression&lt;TResult&gt; 位于不同的文件中(Expression.csLambdaExpression.cs)。

似乎将类放置在文件中的逻辑是该类与它在逻辑上所属的其他类一起使用。

【讨论】:

    【解决方案2】:

    我已采用(后来在我的工作场所鼓励)的约定是将通用参数添加到文件名中。因此,例如,我们将Task.cs 用于非通用版本,Task(T).cs 用于通用版本。这背后的原因很大程度上是由于我们非常严格地执行每个文件一个类的规则。

    【讨论】:

    • 那么如果你只有一个通用的版本,你还叫它Task(T).cs吗?
    • @Gigi 一般来说,不,尽管如果我们这样做可能更有意义。目前,该规则仅在区分同名的泛型和非泛型类时发挥作用。
    • 确实,说实话,这样工作确实感觉有点不一致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多