Partager via


Évitez les attributs non scellés

Mise à jour : novembre 2007

TypeName

AvoidUnsealedAttributes

CheckId

CA1813

Catégorie

Microsoft.Performance

Modification avec rupture

Oui

Cause

Un type public hérite de System.Attribute, n'est pas abstrait et n'est pas sealed (scellé) (NotInheritable en Visual Basic).

Description de la règle

La bibliothèque de classes du .NET Framework fournit des méthodes pour récupérer des attributs personnalisés. Par défaut, ces méthodes recherchent la hiérarchie d'héritage d'attributs ; par exemple, Attribute.GetCustomAttribute recherche le type d'attribut spécifié, ou tout type d'attribut qui étend le type d'attribut spécifié. Sceller l'attribut élimine la recherche par le biais de la hiérarchie d'héritage et peut améliorer les performances.

Comment corriger les violations

Pour corriger une violation de cette règle, scellez le type d'attribut ou rendez-le abstrait.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle. Vous ne devez le faire que si vous définissez une hiérarchie d'attributs et ne pouvez ni sceller l'attribut, ni le rendre abstrait.

Exemple

L'exemple suivant montre un attribut personnalisé qui satisfait cette règle.

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

}

Règles connexes

Définir des accesseurs pour les arguments d'attribut

Marquer les attributs avec AttributeUsageAttribute

Voir aussi

Référence

Indications concernant l'utilisation des attributs