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