CA1813: Evitare attributi non sealed
Proprietà | valore |
---|---|
ID regola | CA1813 |
Title | Evitare attributi unsealed |
Categoria | Prestazioni |
La correzione causa un'interruzione o meno | Interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Un tipo pubblico eredita da System.Attribute, non è astratto e non è sealed (NotInheritable
in Visual Basic).
Descrizione regola
.NET fornisce metodi per il recupero di attributi personalizzati. Per impostazione predefinita, questi metodi eseguono ricerche nella gerarchia di ereditarietà dell'attributo. Ad esempio, System.Attribute.GetCustomAttribute cerca il tipo di attributo specificato o qualsiasi tipo di attributo che estende il tipo di attributo specificato. La chiusura dell'attributo elimina la ricerca tramite la gerarchia di ereditarietà e può migliorare le prestazioni.
Come correggere le violazioni
Per correggere una violazione di questa regola, bloccare il tipo di attributo o renderlo astratto.
Quando eliminare gli avvisi
È sicuro eliminare un avviso da questa regola. Eliminare solo se si definisce una gerarchia di attributi e non è possibile bloccare l'attributo o renderlo astratto.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempio
Nell'esempio seguente viene illustrato un attributo personalizzato che soddisfa questa regola.
// Satisfies rule: AvoidUnsealedAttributes.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DeveloperAttribute : Attribute
{
private string nameValue;
public DeveloperAttribute(string name)
{
nameValue = name;
}
public string Name
{
get
{
return nameValue;
}
}
}
Imports System
Namespace ca1813
' Satisfies rule: AvoidUnsealedAttributes.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>
Public NotInheritable Class DeveloperAttribute
Inherits Attribute
Public Sub New(name As String)
Me.Name = name
End Sub
Public ReadOnly Property Name() As String
End Class
End Namespace
Regole correlate
- CA1019: Definire le funzioni di accesso per gli argomenti degli attributi
- CA1018: Contrassegnare gli attributi con AttributeUsageAttribute