CA1012: Abstract types should not have constructors

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at CA1012: Abstract types should not have constructors.

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.

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.

using System;
     
namespace Samples  
{   
    // Violates this rule      
    public abstract class Book      
    {          
        protected Book()          
        {          
        }      
    } 
}

Show: