CA1813: Evite atributos não selados
Property | valor |
---|---|
ID da regra | CA1813 |
Título | Evite atributos sem lacre |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Quebrando |
Habilitado por padrão no .NET 9 | Não |
Motivo
Um tipo público herda de System.Attribute, não é abstrato e não é selado (NotInheritable
no Visual Basic).
Descrição da regra
O .NET fornece métodos para recuperar atributos personalizados. Por padrão, esses métodos pesquisam a hierarquia de herança de atributos. Por exemplo, System.Attribute.GetCustomAttribute procura o tipo de atributo especificado ou qualquer tipo de atributo que estenda o tipo de atributo especificado. A selagem do atributo elimina a pesquisa através da hierarquia de herança e pode melhorar o desempenho.
Como corrigir violações
Para corrigir uma violação desta regra, sela o tipo de atributo ou torne-o abstrato.
Quando suprimir avisos
É seguro suprimir uma advertência desta regra. Suprima somente se estiver definindo uma hierarquia de atributos e não puder selar o atributo ou torná-lo abstrato.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplo
O exemplo a seguir mostra um atributo personalizado que satisfaz essa regra.
// 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
Regras conexas
- CA1019: Definir acessadores para argumentos de atributo
- CA1018: Marcar atributos com AttributeUsageAttribute