CA1012 : Les types abstraits ne doivent pas avoir de constructeursCA1012: Abstract types should not have constructors

TypeNameTypeName AbstractTypesShouldNotHaveConstructorsAbstractTypesShouldNotHaveConstructors
CheckIdCheckId CA1012CA1012
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Un type public est abstrait et possède un constructeur public.A public type is abstract and has a public constructor.

Description de la règleRule Description

Les constructeurs des types abstraits peuvent être appelés uniquement par des types dérivés.Constructors on abstract types can be called only by derived types. Étant donné que les constructeurs publics créent des instances d'un type et que vous ne pouvez pas créer d'instance d'un type abstrait, un type abstrait doté d'un constructeur public est de conception incorrecte.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.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, rendez le constructeur protégé, ou bien ne pas déclarer le type comme abstract.To fix a violation of this rule, either make the constructor protected or do not declare the type as abstract.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule. Le type abstrait a un constructeur public.The abstract type has a public constructor.

ExempleExample

L’exemple suivant contient un type abstrait qui enfreint cette règle.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()          
        {          
        }      
    } 
}

ExempleExample

L’exemple suivant résout la violation précédente en modifiant l’accessibilité du constructeur à partir de public à protected.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()          
        {          
        }      
    } 
}
Imports System     

Namespace Samples
         
    ' Violates this rule      
    Public MustInherit Class Book 
            
        Protected Sub New()          
        End Sub 
        
    End Class 
       
End Namespace