É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