Sdílet prostřednictvím


CA1012: Abstraktní typy by neměl mít konstruktory

TypeName

AbstractTypesShouldNotHaveConstructors

CheckId

CA1012

Kategorie

Microsoft.Design

Narušující změna

Nenarušující

Příčina

Veřejné typ je abstraktní a obsahuje veřejný konstruktor.

Popis pravidla

Konstruktory abstraktních typů mohou být volány pouze odvozenými typy.Jelikož veřejné konstruktory vytváření instance typu, přičemž nelze vytvořit instance abstraktního typu, je abstraktní typ obsahující veřejný konstruktor nesprávně navržen.

Jak vyřešit porušení

Pro vyřešení porušení tohoto pravidla je zapotřebí stanovit, aby byl konstruktor chráněný nebo nedeklarovat typ jako abstraktní.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.Abstraktní typ obsahuje veřejný konstruktor.

Příklad

Následující příklad obsahuje abstraktní typ, který porušuje toto pravidlo.

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

Následující příklad řeší předchozí porušení změnou přístupnosti ke konstruktoru z public na 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()          
        {          
        }      
    } 
}