FxCop抽象类型在没有new时不应该有构造函数

the*_*ase 2 .net vb.net fxcop abstract

我有一个问题FxCop和警告:Abstract types should not have constructors.

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

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

Ani*_*Ani 6

尝试将受保护的无参数构造函数添加到抽象类中.

如果不提供构造函数,编译器会为您添加一个公共的无参数构造函数.显然,抽象类不适合使用公共构造函数,因为它们 无论如何都受到有效保护 - 抽象类型的构造函数最多只能被子类调用(这是抽象类型的整个点 - 它不能被实例化'香草').这个设计缺陷是导致FxCop抱怨的原因.

另一方面,你采取的解决问题的步骤太过极端; 只有私有构造函数的类(抽象或非抽象)在实践中不是子类(除了嵌套类) - 没有隐式或显式base(...)构造函数调用可能在派生类的构造函数中起作用.

编辑:我喜欢这个MSDN页面的方式:

在上面的示例中,抽象类型具有公共构造函数,这可能会使用户感到困惑.他们看到了公共构造函数,但不明白为什么他们无法创建类型.