TypeName | AbstractTypesShouldNotHaveConstructors |
CheckId | CA1012 |
Category | Microsoft.Design |
Breaking Change | Non-breaking |
A public type is abstract and has a public constructor.
Constructors on abstract types can be called only by derived types. Because public constructors create instances of a type, and you cannot create instances of an abstract type, an abstract type that has a public constructor is incorrectly designed.
To fix a violation of this rule, either make the constructor protected or do not declare the type as abstract.
Do not suppress a warning from this rule. The abstract type has a public constructor.
The following example contains an abstract type that violates this rule.
Imports System Namespace Samples ' Violates this rule Public MustInherit Class Book Public Sub New() End Sub End Class End Namespace
using System; namespace Samples { // Violates this rule public abstract class Book { public Book() { } } }
The following example fixes the previous violation by changing the accessibility of the constructor from public to protected.
Imports System Namespace Samples ' Violates this rule Public MustInherit Class Book Protected Sub New() End Sub End Class End Namespace
using System; namespace Samples { // Violates this rule public abstract class Book { protected Book() { } } }