Export (0) Print
Expand All
Expand Minimize

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()          
        {          
        }      
    } 
}


Community Additions

ADD
Show:
© 2014 Microsoft