Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1813 |
| Název | Vyhněte se nezapečetěným atributům |
| Kategorie | Výkon |
| Oprava způsobující chybu nebo chybu způsobující chybu | Narušující |
| Povoleno ve výchozím nastavení v .NET 10 | No |
Příčina
Veřejný typ dědí z System.Attribute, není abstraktní a není zapečetěn (NotInheritable v jazyce Visual Basic).
Popis pravidla
.NET poskytuje metody pro načítání vlastních atributů. Ve výchozím nastavení tyto metody prohledávají hierarchii dědičnosti atributů. Například System.Attribute.GetCustomAttribute vyhledá zadaný typ atributu nebo jakýkoli typ atributu, který rozšiřuje zadaný typ atributu. Zapečetění atributu eliminuje hledání prostřednictvím hierarchie dědičnosti a může zlepšit výkon.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, zapečetěte typ atributu nebo ho nastavte jako abstraktní.
Kdy potlačit upozornění
Je bezpečné potlačit upozornění z tohoto pravidla. Potlačit pouze v případě, že definujete hierarchii atributů a nemůžete zapečetit atribut nebo ho nastavit jako abstraktní.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklad
Následující příklad ukazuje vlastní atribut, který splňuje toto pravidlo.
// 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
Související pravidla
- CA1019: Definujte přístupové objekty pro argumenty atributu
- CA1018: Označte atributy pomocí AttributeUsageAttribute