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 abstrait et n’est pas scellé (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 .NET Framework fournit des méthodes pour récupérer des attributs personnalisés.The .NET Framework class library provides methods for retrieving custom attributes. Par défaut, ces méthodes recherchent la hiérarchie d'héritage des attributs.By default, these methods search the attribute inheritance hierarchy. 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é.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 rendre abstraite.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. Supprimez uniquement si vous définissez une hiérarchie d’attribut et ne peut pas sceller l’attribut ou rendre abstraite.Suppress 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

Voir aussiSee also