【问题标题】:FxCop Abstract types should not have constructors when no new没有新的 FxCop 抽象类型不应该有构造函数
【发布时间】:2011-05-16 03:26:54
【问题描述】:

我对 FxCop 和警告有疑问:Abstract types should not have constructors

这是为许多抽象类显示的(可能全部,我还没有检查过)。当我看起来他们中的大多数人都没有新方法时,所以我认为是编译器添加了一个默认方法。因此,要删除它,我添加了一个私有默认构造函数 (Private Sub New()),这意味着所有继承类都无法构建并出现错误: Class 'InheritingClass' has no accessible 'Sub New' and cannot be inherited.

这似乎很奇怪,因为 FxCop 不请求公共构造函数,但是当我删除它时构建失败。

【问题讨论】:

    标签: .net vb.net fxcop abstract


    【解决方案1】:

    尝试向抽象类添加一个受保护的无参数构造函数。

    当您不提供构造函数时,编译器会为您添加一个 public,无参数的。显然,抽象类拥有公共构造函数是不合适的,因为它们无论如何都受到有效保护 - 抽象类型上的构造函数最多可以被子类调用(这就是抽象类型的全部要点 - 它不能被实例化为“香草”)。这个设计缺陷是导致 FxCop 抱怨的原因。

    另一方面,您解决问题的步骤过于极端;具有 only 私有构造函数的类(无论是否抽象)实际上是不可子类化的(嵌套类除外) - 没有隐式或显式 base(...) 构造函数调用可能在派生的类的构造函数。

    编辑:我喜欢this MSDN page 所说的方式:

    在上面的例子中抽象类型有 一个公共构造函数,它可以 迷惑用户。他们看到公众 构造函数,但不明白为什么 他们无法创建类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2018-06-10
      • 2012-07-22
      • 2017-06-04
      • 2010-09-20
      • 2021-11-24
      相关资源
      最近更新 更多