2010-11-26 41 views
2

我遇到了FxCop的问题,并且警告:Abstract types should not have constructorsFxCop当没有新的时候,抽象类型不应该有构造函数

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

这似乎很奇怪,因为FxCop的请求,没有公共的构造,但是当我删除了构建失败。

回答

6

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

当您不提供构造函数时,编译器会为您添加一个public,无参数的。显然,抽象类是不适合具有公共构造函数的,因为它们实际上是有效的保护 - 抽象类型的构造函数最多可以被子类调用(这是抽象类型的全部要点 - 它可以'不要实例化'香草')。这种设计缺陷是导致FxCop投诉的原因。

另一方面,您为解决问题所采取的步骤太极端了;只有的类(抽象与否)私有构造函数在实践中是不可分类的(除了嵌套类) - 没有可能在派生类的构造函数中工作的隐式或显式构造函数调用。

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

In the example above abstract type has a public constructor, which can confuse users. They see the public constructor, but do not understand why they are unable to create the type.

+0

现货,并且说明是有帮助了。 – themaninthesuitcase 2010-11-26 11:42:39