Condividi tramite


CA1813: Evitare attributi non sealed

TypeName

AvoidUnsealedAttributes

CheckId

CA1813

Category

Microsoft.Performance

Breaking Change

Breaking

Causa

Un tipo pubblico eredita da System.Attribute, non è astratto e non è sealed (NotInheritable in Visual Basic).

Descrizione della regola

La libreria di classi .NET Framework fornisce metodi per recuperare attributi personalizzati.Per impostazione predefinita, questi metodi cercano la gerarchia di ereditarietà degli attributi; ad esempio Attribute.GetCustomAttribute cerca il tipo di attributo specificato o qualsiasi tipo di attributo che estenda l'attributo specificato.L'utilizzo di attributi sealed elimina la ricerca tramite la gerarchia di ereditarietà e può migliorare le prestazioni.

Come correggere le violazioni

Per correggere una violazione di questa regola, rendere l'attributo sealed o astratto.

Esclusione di avvisi

L'esclusione di un avviso da questa regola è sicura.È opportuno eseguire questa operazione solo se si definisce la gerarchia di un attributo e non è possibile rendere l'attributo sealed o astratto.

Esempio

Nell'esempio riportato di seguito viene illustrato un attributo personalizzato che soddisfa questa regola.

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

}

Regole correlate

CA1019: Definire le funzioni di accesso per gli argomenti degli attributi

CA1018: Contrassegnare gli attributi con AttributeUsageAttribute

Vedere anche

Riferimenti

Attribute Usage Guidelines