Sdílet prostřednictvím


CA1018: Označte atributy pomocí AttributeUsageAttribute

TypeName

MarkAttributesWithAttributeUsage

CheckId

CA1018

Kategorie

Microsoft.Design

Narušující změna

Narušující

Příčina

Atribut AttributeUsageAttribute není k dispozici na vlastním atributu.

Popis pravidla

Při definování vlastního atributu jej označte pomocí AttributeUsageAttribute k indikaci toho, kde ve zdrojovém kódu lze vlastní atribut použít.Význam a zamýšlené použití atributu určuje jeho platné umístění v kódu.Lze například definovat atribut identifikující osobu, která je zodpovědná za udržování a zlepšování každého typu v knihovně a tato odpovědnost je vždy přiřazena na úrovni typu.V tomto případě by měly kompilátory povolit atribut na třídách, vyčíslení a rozhraní, ale neměly by jej povolit na metodách, událostech nebo vlastnostech.Organizační zásady a postupy by určovaly, zda má být atribut povolen na sestaveních.

Výčet AttributeTargets definuje cíle, které lze zadat pro vlastní atribut.Vynecháte-li AttributeUsageAttribute, vlastní atribut bude platit pro všechny cíle definované hodnotou All výčtu AttributeTargets.

Jak vyřešit porušení

Pro nápravu porušení tohoto pravidla zadejte cíle pro atribut pomocí AttributeUsageAttribute.Viz následující příklad.

Kdy potlačit upozornění

Namísto potlačení zprávy by mělo být porušení tohoto pravidla opraveno.I když atribut dědí AttributeUsageAttribute, měl by být přítomen pro zjednodušení údržby kódu.

Příklad

Následující příklad definuje dva atributy.BadCodeMaintainerAttribute nesprávně vynechá příkaz AttributeUsageAttribute a GoodCodeMaintainerAttribute správně implementuje atribut, který je popsán výše v této části.Všimněte si, že vlastnost DeveloperName je vyžadovaná pravidlem návrhu CA1019: Definujte přístupové vlastnosti pro argumenty atributu a je zahrnuta pro úplnost.

Imports System

Namespace DesignLibrary

' Violates rule: MarkAttributesWithAttributeUsage. 
NotInheritable Public Class BadCodeMaintainerAttribute
    Inherits Attribute
    Private developer As String 

    Public Sub New(developerName As String)
        developer = developerName
    End Sub 'New 

    Public ReadOnly Property DeveloperName() As String 
        Get 
            Return developer
        End Get 
    End Property 
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)> _
NotInheritable Public Class GoodCodeMaintainerAttribute
    Inherits Attribute
    Private developer As String 

    Public Sub New(developerName As String)
        developer = developerName
    End Sub 'New 

    Public ReadOnly Property DeveloperName() As String 
        Get 
            Return developer
        End Get 
    End Property 
End Class  

End Namespace
using System;

namespace DesignLibrary
{
// Violates rule: MarkAttributesWithAttributeUsage. 

   public sealed class BadCodeMaintainerAttribute :Attribute 
   {
      string developer;

      public BadCodeMaintainerAttribute(string developerName)
      {
         developer = developerName;
      }
      public string DeveloperName
      {
         get 
         {
            return developer;
         }
      }
   }
// Satisfies rule: Attributes specify AttributeUsage. 

   // The attribute is valid for type-level targets.
   [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate)]
   public sealed class GoodCodeMaintainerAttribute :Attribute 
   {
      string developer;

      public GoodCodeMaintainerAttribute(string developerName)
      {
         developer = developerName;
      }
      public string DeveloperName
      {
         get 
         {
            return developer;
         }
      }
   }
}

Související pravidla

CA1019: Definujte přístupové vlastnosti pro argumenty atributu

CA1813: Vyhněte se nezapečetěným atributům

Viz také

Další zdroje

Attribute Usage Guidelines