CA1047: Non dichiarare membri protetti nei tipi sealed
Proprietà | valore |
---|---|
ID regola | CA1047 |
Title | Non dichiarare membri protected nei tipi sealed |
Categoria | Progettazione |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come suggerimento |
Causa
Un tipo pubblico è sealed
(NotInheritable
in Visual Basic) e dichiara un membro protetto o un tipo annidato protetto. Questa regola non segnala violazioni per Finalize i metodi, che devono seguire questo modello.
Descrizione regola
I tipi dichiarano membri protetti in modo che i tipi che ereditano possano accedere al membro o eseguirne l'override. Per definizione, non è possibile ereditare da un tipo sealed, il che significa che non è possibile chiamare metodi protetti su tipi sealed.
Il compilatore C# genera l'avviso CS0628 anziché CA1047 per questa situazione.
Come correggere le violazioni
Per correggere una violazione di questa regola, modificare il livello di accesso del membro in privato o rendere ereditabile il tipo.
Quando eliminare gli avvisi
Non escludere un avviso da questa regola. Lasciare il tipo nello stato corrente può causare problemi di manutenzione e non offre alcun vantaggio.
Configurare il codice da analizzare
Usare l'opzione seguente per configurare le parti della codebase in cui eseguire questa regola.
È possibile configurare questa opzione solo per questa regola, per tutte le regole a cui si applica o per tutte le regole in questa categoria (Progettazione) a cui si applica. Per altre informazioni, vedere Opzioni di configurazione delle regole di qualità del codice.
Includere superfici API specifiche
È possibile configurare le parti della codebase in modo da eseguire questa regola in base alla relativa accessibilità impostando l'opzione api_surface. Ad esempio, per specificare che la regola deve essere eseguita solo sulla superficie dell'API non pubblica, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Nota
Sostituire la parte XXXX
di CAXXXX
con l'ID della regola applicabile.
Esempio
Nell'esempio seguente viene illustrato un tipo che viola questa regola.
public sealed class SealedClass
{
protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
Protected Sub MyMethod
End Sub
End Class