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