Condividi tramite


CA1012: I tipi astratti non devono avere costruttori

TypeName

AbstractTypesShouldNotHaveConstructors

CheckId

CA1012

Category

Microsoft.Design

Breaking Change

Non sostanziale

Causa

Un tipo pubblico è astratto e presenta un costruttore pubblico.

Descrizione della regola

I costruttori sui tipi astratti possono essere chiamati solo da tipi derivati. Poiché i costruttori pubblici creano istanze di un tipo e non è possibile creare istanze di un tipo astratto, per una buona progettazione non bisognerebbe creare un tipo astratto con costruttore pubblico.

Come correggere le violazioni

Per correggere una violazione di questa regola, rendere protetto il costruttore oppure non dichiarare il tipo come astratto.

Esclusione di avvisi

Non escludere un avviso da questa regola. Il tipo astratto dispone di un costruttore pubblico.

Esempio

Nell'esempio riportato di seguito è contenuto un tipo astratto che viola questa regola.

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

Nell'esempio seguente , la violazione precedente viene corretta tramite l'impostazione dell'accessibilità del costruttore da public su 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()          
        {          
        }      
    } 
}