Språk
Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA1018 |
| Title | Markera attribut med AttributeUsageAttribute |
| Kategori | Design |
| Korrigeringen är antingen invasiv eller icke-invasiv | Avbrott |
| Aktiverad som standard i .NET 10 | Som förslag |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Attributet System.AttributeUsageAttribute finns inte i det anpassade attributet.
Regelbeskrivning
När du definierar ett anpassat attribut markerar du det med hjälp AttributeUsageAttribute av för att ange var i källkoden det anpassade attributet kan tillämpas. Innebörden och den avsedda användningen av ett attribut avgör dess giltiga platser i koden. Du kan till exempel definiera ett attribut som identifierar den person som ansvarar för att underhålla och förbättra varje typ i ett bibliotek, och det ansvaret tilldelas alltid på typnivå. I det här fallet bör kompilatorer aktivera attributet för klasser, uppräkningar och gränssnitt, men bör inte aktivera det på metoder, händelser eller egenskaper. Organisationsprinciper och procedurer avgör om attributet ska aktiveras i sammansättningar.
Uppräkningen System.AttributeTargets definierar de mål som du kan ange för ett anpassat attribut. Om du utelämnar AttributeUsageAttribute, kommer ditt anpassade attribut att vara giltigt för alla mål, enligt All-värdet för uppräkningen AttributeTargets.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse av den här regeln anger du mål för attributet med hjälp AttributeUsageAttributeav . Se följande exempel.
När du ska ignorera varningar
Du bör åtgärda ett brott mot den här regeln i stället för att exkludera meddelandet. Även om attributet ärver AttributeUsageAttributebör attributet finnas för att förenkla kodunderhållet.
Exempel
I följande exempel definieras två attribut.
BadCodeMaintainerAttribute utelämnar instruktionen AttributeUsageAttribute felaktigt och GoodCodeMaintainerAttribute implementerar på rätt sätt det attribut som beskrivs tidigare i det här avsnittet. (Egenskapen DeveloperName krävs av designregeln CA1019: Definiera accessorer för attributargument och inkluderas för fullständighet.)
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