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 | CA1018 |
| Název | Označte atributy pomocí AttributeUsageAttribute |
| Kategorie | Návrh |
| Oprava, která může být destruktivní nebo nedestruktivní | Přerušující |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Atribut System.AttributeUsageAttribute není k dispozici u vlastního atributu.
Popis pravidla
Když definujete vlastní atribut, označte místo ve zdrojovém kódu, kde jej lze použít, pomocí AttributeUsageAttribute. Význam a zamýšlené použití atributu určuje jeho platné umístění v kódu. Můžete například definovat atribut, který identifikuje osobu odpovědnou za údržbu a vylepšení každého typu v knihovně a tato odpovědnost je vždy přiřazena na úrovni typu. V tomto případě by kompilátory měly povolit atribut u tříd, výčtů a rozhraní, ale neměly by jej povolit pro metody, události nebo vlastnosti. Zásady a postupy organizace určují, jestli má být atribut povolen pro sestavení.
Výčet System.AttributeTargets definuje cíle, které můžete zadat pro vlastní atribut. Pokud vynecháte AttributeUsageAttribute, bude váš vlastní atribut platný pro všechny cíle, jak je definováno hodnotou výčtu AllAttributeTargets.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, zadejte cíle pro atribut pomocí .AttributeUsageAttribute Viz následující příklad.
Kdy potlačit upozornění
Místo vyloučení zprávy byste měli opravit porušení tohoto pravidla. I když atribut dědí AttributeUsageAttribute, atribut by měl být k dispozici pro zjednodušení údržby kódu.
Příklad
Následující příklad definuje dva atributy.
BadCodeMaintainerAttribute nesprávně vynechá AttributeUsageAttribute příkaz a GoodCodeMaintainerAttribute správně implementuje atribut, který je popsán výše v této části. (Vlastnost DeveloperName je vyžadována pravidlem návrhu CA1019: Definovat přístupové objekty pro argumenty atributů a je zahrnuta pro úplnost.)
using System;
namespace ca1018
{
// Violates rule: MarkAttributesWithAttributeUsage.
public sealed class BadCodeMaintainerAttribute : Attribute
{
public BadCodeMaintainerAttribute(string developerName)
{
DeveloperName = developerName;
}
public string DeveloperName { get; }
}
// Satisfies rule: Attributes specify AttributeUsage.
// This attribute is valid for type-level targets.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate)]
public sealed class GoodCodeMaintainerAttribute : Attribute
{
public GoodCodeMaintainerAttribute(string developerName)
{
DeveloperName = developerName;
}
public string DeveloperName { get; }
}
}
Imports System
Namespace ca1018
' Violates rule: MarkAttributesWithAttributeUsage.
Public NotInheritable Class BadCodeMaintainerAttribute
Inherits Attribute
Public Sub New(developerName As String)
Me.DeveloperName = developerName
End Sub 'New
Public ReadOnly Property DeveloperName() As String
End Class
' Satisfies rule: Attributes specify AttributeUsage.
' The attribute is valid for type-level targets.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Enum Or
AttributeTargets.Interface Or AttributeTargets.Delegate)>
Public NotInheritable Class GoodCodeMaintainerAttribute
Inherits Attribute
Public Sub New(developerName As String)
Me.DeveloperName = developerName
End Sub 'New
Public ReadOnly Property DeveloperName() As String
End Class
End Namespace
Související pravidla
- CA1019: Definujte přístupové objekty pro argumenty atributu
- CA1813: Vyhněte se nezapečetěným atributům