Udostępnij za pośrednictwem


CA1012: Typy abstrakcyjne nie powinny mieć konstruktorów

TypeName

AbstractTypesShouldNotHaveConstructors

CheckId

CA1012

Kategoria

Microsoft.Design

Zmiana kluczowa

Niekluczowa

Przyczyna

Typ publiczny jest abstrakcyjny i ma publiczny konstruktor.

Opis reguły

Konstruktory dla typów abstrakcyjnych mogą być wywoływane tylko przez typy pochodne.Ponieważ publiczne konstruktory tworzą wystąpienia typu, a nie można utworzyć wystąpienia typu abstrakcyjnego, publiczny konstruktor typu abstrakcyjnego został niepoprawnie zaprojektowany.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy wprowadzić konstruktor chroniony lub nie deklarować typu jako abstrakcyjny.

Kiedy pomijać ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.Abstrakcyjny typ ma publiczny konstruktor.

Przykład

Poniższy przykład zawiera typ abstrakcyjny naruszający regułę.

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

Poniższy przykład rozwiązuje naruszenie poprzedniego przez zmianę dostępności konstruktora 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()          
        {          
        }      
    } 
}