Freigeben über


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

Siehe auch

Referenz

Richtlinien für die Verwendung von Attributen