CA1012: Abstract types should not have constructors

 
TypeNameAbstractTypesShouldNotHaveConstructors
CheckIdCA1012
CategoryMicrosoft.Design
Breaking ChangeNon-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: