Share via


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 System.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.

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, deklarieren Sie den Attributtyp als sealed oder abstract.

Warnungsausschluss

Warnungen dieser Regel können gefahrlos ausgeschlossen 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

Accessoren für Attributargumente definieren

Attribute mit AttributeUsageAttribute markieren

Siehe auch

Referenz

Richtlinien für die Verwendung von Attributen