CA1813: Evite atributos sem lacre
TypeName |
AvoidUnsealedAttributes |
CheckId |
CA1813 |
<strong>Categoria</strong> |
Microsoft.Performance |
Alteração significativa |
Quebrando |
Causa
Um tipo público herda de System.Attribute, não é abstrata e não é selado (NotInheritable em Visual Basic).
Descrição da regra
O .NET Framework a biblioteca de classe fornece métodos para recuperar atributos personalizados. Por padrão, esses métodos pesquisar a hierarquia de herança de atributo; Por exemplo Attribute.GetCustomAttribute procura o tipo de atributo especificado, ou qualquer tipo de atributo que estende o tipo de atributo especificado. Lacrar o atributo elimina a pesquisa por meio da hierarquia de herança e pode melhorar o desempenho.
Como corrigir violações
Para corrigir uma violação desta regra, lacre o tipo de atributo ou torná-lo abstrata.
Quando suprimir avisos
É seguro eliminar um aviso esta regra. Você deve fazer isso somente se você estiver definindo uma hierarquia de atributo e não pode lacrar o atributo ou torná-lo abstrata.
Exemplo
O exemplo a seguir mostra um atributo personalizado que atende a essa regra.
Imports System
Namespace PerformanceLibrary
' Satisfies rule: AvoidUnsealedAttributes.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)> _
NotInheritable Public Class DeveloperAttribute
Inherits Attribute
Private nameValue As String
Public Sub New(name As String)
nameValue = name
End Sub
Public ReadOnly Property Name() As String
Get
Return nameValue
End Get
End Property
End Class
End Namespace
using System;
namespace PerformanceLibrary
{
// 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;
}
}
}
}
Regras relacionadas
CA1019: Definir acessadores para argumentos de atributo
CA1018: Atributos de marca com AttributeUsageAttribute