Udostępnij za pośrednictwem


CA1813: Uniknąć niezamkniętych szczelnie atrybutów

TypeName

AvoidUnsealedAttributes

CheckId

CA1813

Kategoria

Microsoft.Performance

Złamanie zmiany

Złamanie

Przyczyna

Typ publiczny dziedziczy z System.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: Definiowanie akcesorów dla argumentów atrybutu.

CA1018: Atrybutów znacznika z element AttributeUsageAttribute

Zobacz też

Informacje

Attribute Usage Guidelines