Aracılığıyla paylaş


CA1018: Öznitelikleri AttributeUsageAttribute ile işaretleyin

Tür Adı

MarkAttributesWithAttributeUsage

CheckId

CA1018

Kategori

Microsoft.Design

Bozan Değişiklik

Bozan

Sebep

Bir AttributeUsageAttribute özniteliği, özel öznitelikte temsil edilmez.

Kural Tanımı

Özel bir öznitelik tanımladığınızda, kaynak kodda özel özniteliğin nerede uygulanabilir olduğunu göstermek için AttributeUsageAttribute ile işaretleyin.Bir özniteliğin anlamı ve amaçlanan kullanımı, kodun içinde onun varolan konumunu tanımlar.Örneğin, kütüphanedeki her türün bakımından ve geliştirmesinde sorumlu kişiyi tanımlayan bir öznitelik tanımlayabilirsin ve bu sorumluluk sadece tür düzeyinde atanır.Bu durumda derleyiciler; öznitelikleri sınıflarda, numaralandırmalarda ve arayüzlerde etkinleştirmelidir; ancak onu yöntemlerde, olaylarda ve özelliklerde etkinleştirmemelidir.Kuruluş ilkeleri ve yordamları, özniteliğin derlemede etkinleştirilip etkinleştirilmeyeceğini dikte etmelidir.

Bir AttributeTargets numaralandırması, özel bir öznitelik için belirlediğiniz hedefleri tanımlar.Eğer AttributeUsageAttribute atlarsanız, kendi özel özniteliğiniz AttributeTargets numaralandırmasının All değeri tarafından tanımlanan tüm hedefler için geçerli olacaktır.

İhlallerin Düzeltilmesi

Bu kuralın ihlalini düzeltmek için AttributeUsageAttribute kullanarak öznitelikler için hedefleri belirtin.Aşağıdaki örneklere bakın.

Uyarılar Ne Zaman Bastırılmalı

İletiyi dışlamak yerine bu kuralın ihlalini çözmeniz gerekir.Öznitelik AttributeUsageAttribute tarafından devralırsa; öznitelik, kod bakımı kolaylaştırmak için temsil edilmelidir.

Örnek

Aşağıdaki örnek, iki özniteliği tanımlar.BadCodeMaintainerAttribute, AttributeUsageAttribute deyimini hatalı atlar ve GoodCodeMaintainerAttribute, bu bölümde daha önce anlatılan özniteliği doğru uygular.Bir DeveloperName özniteliği, CA1019: Öznitelik bağımsız değişkenleri için erişimcileri tanımlayın tasarım kuralı tarafından gerekli olduğunu ve eksik kalmaması açısından bulunmasını unutmayın.

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;
         }
      }
   }
}

İlgili Kurallar

CA1019: Öznitelik bağımsız değişkenleri için erişimcileri tanımlayın

CA1813: Korumasız özniteliklerden kaçının

Ayrıca bkz.

Diğer Kaynaklar

Attribute Usage Guidelines