CA1813: Nicht versiegelte Attribute vermeiden
TypeName |
AvoidUnsealedAttributes |
CheckId |
CA1813 |
Kategorie |
Microsoft.Performance |
Unterbrechende Änderung |
Breaking |
Ursache
Ein öffentlicher Typ, der von System.Attribute erbt, ist nicht abstrakt und nicht versiegelt ( in Visual Basic NotInheritable).
Regelbeschreibung
Die .NET Framework-Klassenbibliothek stellt Methoden zum Abrufen benutzerdefinierter Attribute bereit. Standardmäßig durchsucht diese Methode die Vererbungshierarchie des Attributs. Beispielsweise sucht Attribute.GetCustomAttribute nach dem angegebenen Attributtyp oder nach einem Attributtyp, der den angegebenen Attributtyp erweitert. Durch die Verwendung eines versiegelten Attributs wird das Durchsuchen der Vererbungshierarchie unterbunden und die Leistung u. U. verbessert.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, deklarieren Sie den Attributtyp als sealed oder abstract.
Wann sollten Warnungen unterdrückt werden?
Warnungen dieser Regel können gefahrlos unterdrückt werden. Sie sollten dies aber nur tun, wenn Sie eine Attributhierarchie definieren und das Attribut weder als sealed noch als abstract deklarieren können.
Beispiel
Im folgenden Beispiel wird ein benutzerdefiniertes Attribut veranschaulicht, das der Regel entspricht.
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;
}
}
}
}
Verwandte Regeln
CA1019: Accessors für Attributargumente definieren
CA1018: Attribute mit AttributeUsageAttribute markieren