CA1813 : Évitez les attributs unsealedCA1813: Avoid unsealed attributes

TypeNameTypeName AvoidUnsealedAttributesAvoidUnsealedAttributes
CheckIdCheckId CA1813CA1813
CategoryCategory Microsoft.PerformanceMicrosoft.Performance
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Un type public hérite System.Attribute, n’est pas abstraite et n’est pas sealed (NotInheritable en Visual Basic).A public type inherits from System.Attribute, is not abstract, and is not sealed (NotInheritable in Visual Basic).

Description de la règleRule Description

La bibliothèque de classes du .NET Framework.NET Framework fournit des méthodes pour récupérer des attributs personnalisés.The .NET Framework.NET Framework class library provides methods for retrieving custom attributes. Par défaut, ces méthodes recherchent la hiérarchie d’héritage d’attribut ; par exemple System.Attribute.GetCustomAttribute recherche le type d’attribut spécifié ou n’importe quel type d’attribut qui étend le type d’attribut spécifié.By default, these methods search the attribute inheritance hierarchy; for example System.Attribute.GetCustomAttribute searches for the specified attribute type, or any attribute type that extends the specified attribute type. Le fait de sceller l’attribut élimine la recherche dans la hiérarchie d’héritage et peut améliorer les performances.Sealing the attribute eliminates the search through the inheritance hierarchy, and can improve performance.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, scellez le type d’attribut ou rendez-le abstrait.To fix a violation of this rule, seal the attribute type or make it abstract.

Quand supprimer les avertissementsWhen to Suppress Warnings

Il est possible de supprimer un avertissement de cette règle.It is safe to suppress a warning from this rule. Vous devez le faire que si vous définissez une hiérarchie d’attribut et ne peut pas sceller l’attribut ou rendre abstraite.You should do this only if you are defining an attribute hierarchy and cannot seal the attribute or make it abstract.

ExempleExample

L’exemple suivant montre un attribut personnalisé qui satisfait cette règle.The following example shows a custom attribute that satisfies this rule.

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

}
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

CA1019 : Définissez des accesseurs pour les arguments d’attributCA1019: Define accessors for attribute arguments

CA1018 : Marquez les attributs avec AttributeUsageAttributeCA1018: Mark attributes with AttributeUsageAttribute

Voir aussiSee Also

AttributsAttributes