Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1813 |
| Tytuł | Unikaj niezapieczętowanych atrybutów |
| Kategoria | Wydajność |
| Poprawka powodująca niezgodność lub niezgodność | Kluczowa |
| Domyślnie włączone na platformie .NET 10 | Nie. |
Przyczyna
Typ publiczny dziedziczy z System.Attributeklasy , nie jest abstrakcyjny i nie jest zapieczętowany (NotInheritable w Visual Basic).
Opis reguły
Platforma .NET udostępnia metody pobierania atrybutów niestandardowych. Domyślnie te metody wyszukują hierarchie dziedziczenia atrybutu. Na przykład System.Attribute.GetCustomAttribute wyszukuje określony typ atrybutu lub dowolny typ atrybutu, który rozszerza określony typ atrybutu. Uszczelnienie atrybutu eliminuje wyszukiwanie w hierarchii dziedziczenia i może zwiększyć wydajność.
Jak naprawić naruszenia
Aby naprawić naruszenie tej reguły, należy przypieczętować typ atrybutu lub uczynić go abstrakcyjnym.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły. Pomijaj tylko wtedy, gdy definiujesz hierarchię atrybutów i nie można przypieczętować atrybutu lub uczynić go abstrakcyjnym.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.
Przykład
W poniższym przykładzie przedstawiono atrybut niestandardowy spełniający tę regułę.
// Satisfies rule: AvoidUnsealedAttributes.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DeveloperAttribute : Attribute
{
public DeveloperAttribute(string name)
{
Name = name;
}
public string Name { get; }
}
Imports System
Namespace ca1813
' Satisfies rule: AvoidUnsealedAttributes.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>
Public NotInheritable Class DeveloperAttribute
Inherits Attribute
Public Sub New(name As String)
Me.Name = name
End Sub
Public ReadOnly Property Name() As String
End Class
End Namespace
Powiązane reguły
- CA1019: Zdefiniuj metody dostępu dla argumentów atrybutu
- CA1018: Oznacz atrybuty atrybutem AttributeUsage