Compartir a través de


Evitar atributos no sellados

Actualización: noviembre 2007

Nombre de tipo

AvoidUnsealedAttributes

Identificador de comprobación

CA1813

Categoría

Microsoft.Performance

Cambio problemático

Motivo

Un tipo público hereda de System.Attribute, no es abstracto y no está sellado (NotInheritable en Visual Basic).

Descripción de la regla

La biblioteca de clases de .NET Framework proporciona los métodos para recuperar los atributos personalizados. De forma predeterminada, estos métodos buscan la jerarquía de herencia del atributo; por ejemplo, Attribute.GetCustomAttribute busca el tipo de atributo especificado o un tipo de atributo que extienda el tipo de atributo especificado. Al sellar el atributo, se elimina la búsqueda a través de la jerarquía de herencia y puede mejorarse el rendimiento.

Cómo corregir infracciones

Para corregir una infracción de esta regla, selle el tipo de atributo o establézcalo como abstracto.

Cuándo suprimir advertencias

Es seguro suprimir una advertencia de esta regla. Sólo debería realizar esto si está definiendo una jerarquía de atributo y no se puede sellar el atributo o establecerlo como abstracto.

Ejemplo

El ejemplo siguiente muestra un atributo personalizado que cumple esta regla.

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;
            }
        }
    }

}

Reglas relacionadas

Definir descriptores de acceso para los argumentos de atributo

Marcar atributos con AttributeUsageAttribute

Vea también

Referencia

Instrucciones de uso de atributos