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

Consulte também

Referência

Diretrizes de uso do atributo