Udostępnij za pośrednictwem


CA1813: Unikaj niezapieczętowanych atrybutów

TypeName

AvoidUnsealedAttributes

CheckId

CA1813

Kategoria

Microsoft.Performance

Złamanie zmiany

Złamanie

Przyczyna

Typ publiczny dziedziczy z Attribute, nie jest obiektem abstrakcyjnym i nie jest zapieczętowany (NotInheritable w języku Visual Basic).

Opis reguły

.NET Framework Biblioteka klas zawiera metody pobierania atrybutów niestandardowych.Domyślnie te metody wyszukiwania atrybutu hierarchii dziedziczenia; na przykład Attribute.GetCustomAttribute wyszukiwanie typu określony atrybut lub dowolnego typu atrybutu, który rozszerza typu określony atrybut.Pieczętowanie atrybut eliminuje wyszukiwania przez hierarchię dziedziczenia i może zwiększyć wydajność.

Jak naprawić naruszenia

Ustalenie naruszenie tej zasady, pieczęć typ atrybutu lub wprowadzić abstrakcyjny.

Kiedy do pomijania ostrzeżenia

Bezpiecznie wyłączyć ostrzeżenia od tej reguły.Należy to zrobić tylko wtedy, gdy można definiowania atrybutu hierarchii i nie można zapieczętować atrybutu lub ustawić abstrakcyjny.

Przykład

W poniższym przykładzie niestandardowy atrybut, który spełnia tę regułę.

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;
            }
        }
    }

}

Zasady pokrewne

CA1019: Zdefiniuj metody dostępu do argumentów atrybutu

CA1018: Oznacz atrybuty AttributeUsageAttribute

Zobacz też

Inne zasoby

Attribute Usage Guidelines