Condividi tramite


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