CA1813: Nicht versiegelte Attribute vermeiden.
Eigenschaft | Wert |
---|---|
Regel-ID | CA1813 |
Titel | Nicht versiegelte Attribute vermeiden. |
Kategorie | Leistung |
Fix führt oder führt nicht zur Unterbrechung | Breaking |
Standardmäßig in .NET 8 aktiviert | Nein |
Ursache
Ein öffentlicher Typ erbt von System.Attribute, ist nicht abstrakt und nicht versiegelt (NotInheritable
in Visual Basic).
Regelbeschreibung
.NET stellt Methoden zum Abrufen benutzerdefinierter Attribute bereit. Standardmäßig wird mit diesen Methoden die Attributvererbungshierarchie durchsucht. Beispielsweise sucht System.Attribute.GetCustomAttribute nach dem angegebenen Attributtyp oder nach einem beliebigen Attributtyp, der den angegebenen Attributtyp erweitert. Durch 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, versiegeln Sie den Attributtyp oder machen Sie ihn abstrakt.
Wann sollten Warnungen unterdrückt werden?
Eine Warnung, die auf dieser Regel basiert, kann problemlos unterdrückt werden. Unterdrücken Sie nur, wenn Sie eine Attribut-Hierarchie definieren und das Attribut nicht versiegeln oder abstrahieren können.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Beispiel
Das folgende Beispiel zeigt ein benutzerdefiniertes Attribut, das diese Regel erfüllt.
// 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 ca1813
' Satisfies rule: AvoidUnsealedAttributes.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>
Public NotInheritable Class DeveloperAttribute
Inherits Attribute
Public Sub New(name As String)
Me.Name = name
End Sub
Public ReadOnly Property Name() As String
End Class
End Namespace
Ähnliche Regeln
- CA1019: Accessoren für Attributargumente definieren.
- CA1018: Attribute mit AttributeUsageAttribute markieren.