Aracılığıyla paylaş


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

TürAdı

DefineAccessorsForAttributeArguments

CheckId

CA1019

Kategori

Microsoft.Design

Bozan Değişiklik

Bozmayan

Sebep

Kurucusunda, bir öznitelik karşılığı olmayan özelliklere sahip argümanlar tanımlar.

Kural Tanımı

Öznitelikler özniteliği işaretlediğinizde özelleştirilen zorunlu argümanları tanımlayabilir.Ayrıca bunlar duruma bağlı argümanlar olarak da bilinirler, çünkü öznitelik yapıcısına verilen özelllikler duruma bağlıdır.Zorunlu her bağımsız değişken yürütme zaman bağımsız değişkenin değeri alınması gerektiğini özniteliği karşılık gelen salt okunur özellik de sağlamalıdır.Bu kural her yapıcı parametre için karşılık gelen özelliği tanımladığınızı denetler.

Öznitelikler isimlendirilmiş argümanlar olarak bilinen duruma bağlı argümanlar olarak da tanımlanabilirler.Bu bağımsız öznitelik oluşturucular ad tarafından sağlanır ve karşılık gelen bir okuma/yazma özelliğine sahip olmalıdır.

Zorunlu ve isteğe bağlı argümanlar için karşılık gelen özellikler ve kurucu parametreleri aynı ancak farklı isim hallerinde isimler kullanılmalıdır.Özellikleri Pascal isim halini/Pascal Case kullanır ve parametreler camel isim halini/Camel Case kullanır.

İhlallerin Düzeltilmesi

Bu kuralın bir ihlalini düzeltmek için her kurucu parametre -bulunmayan- için salt okunur bir özellik ekleyin.

Uyarılar Ne Zaman Bastırılmalı

Zorunlu argümanın değerinin geri alınabilir olmasını istemiyorsanız bu kuraldan bir uyarı gizleyin.

Özel Öznitelik Örneği

Tanımlama

Aşağıdaki örnek, bir zorunlu (konumsal) parametre tanımlayan iki öznitelik göstermektedir.Özniteliğin ilk implementasyonu hatalı şekilde tanımlanmıştır.İkinci implementasyon doğrudur.

Kod

Imports System

Namespace DesignLibrary

' Violates rule: DefineAccessorsForAttributeArguments.
<AttributeUsage(AttributeTargets.All)>  _
NotInheritable Public Class BadCustomAttribute
    Inherits Attribute
    Private data As String 

    ' Missing the property that corresponds to  
    ' the someStringData parameter. 
    Public Sub New(someStringData As String)
        data = someStringData
    End Sub 'New 
End Class 'BadCustomAttribute

' Satisfies rule: Attributes should have accessors for all arguments.
<AttributeUsage(AttributeTargets.All)>  _
NotInheritable Public Class GoodCustomAttribute
    Inherits Attribute
    Private data As String 

    Public Sub New(someStringData As String)
        data = someStringData
    End Sub 'New 

    'The constructor parameter and property 
    'name are the same except for case. 

    Public ReadOnly Property SomeStringData() As String 
        Get 
            Return data
        End Get 
    End Property 
End Class  

End Namespace
using System;

namespace DesignLibrary
{
// Violates rule: DefineAccessorsForAttributeArguments.

   [AttributeUsage(AttributeTargets.All)]
   public sealed class BadCustomAttribute :Attribute 
   {
      string data;

      // Missing the property that corresponds to  
      // the someStringData parameter. 

      public BadCustomAttribute(string someStringData)
      {
         data = someStringData;
      }
   }

// Satisfies rule: Attributes should have accessors for all arguments.

   [AttributeUsage(AttributeTargets.All)]
   public sealed class GoodCustomAttribute :Attribute 
   {
      string data;

      public GoodCustomAttribute(string someStringData)
      {
         data = someStringData;
      }
      //The constructor parameter and property 
      //name are the same except for case. 

      public string SomeStringData
      {
         get 
         {
            return data;
         }
      }
   }
}

Konumsal ve Adlandırılmış Argümanlar

Tanımlama

Konumsal ve adlandırılmış argümanlar kütüphanenizin kullanıcılarına, öznitelik için hangi argümanların zorunlu ve hangilerinin isteğe bağlı olduğunu açığa kavuşturur.

Aşağıdaki örnekte konumsal ve adlandırılmış argümanların ikisi de olan bir öznitelik implementasyonu gösteriliyor.

Kod

using System; 

namespace DesignLibrary
{    
    [AttributeUsage(AttributeTargets.All)]        
    public sealed class GoodCustomAttribute : Attribute    
    {        
        string mandatory;        
        string optional;         

        public GoodCustomAttribute(string mandatoryData)        
        {            
            mandatory = mandatoryData;        
        }         

        public string MandatoryData        
        {            
            get { return mandatory; }        
        }         

        public string OptionalData        
        {            
            get { return optional; }            
            set { optional = value; }        
        }    
    }
}

Yorumlar

Aşağıdaki örnek, özel özniteliğin iki özelliğe nasıl uygulanacağı gösterilmiştir.

Kod

[GoodCustomAttribute("ThisIsSomeMandatoryData", OptionalData = "ThisIsSomeOptionalData")]
public string MyProperty
{
    get { return myProperty; }
    set { myProperty = value; }
}

[GoodCustomAttribute("ThisIsSomeMoreMandatoryData")]
public string MyOtherProperty
{
    get { return myOtherProperty; }
    set { myOtherProperty = value; }
}

İlgili Kurallar

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

Ayrıca bkz.

Diğer Kaynaklar

Attribute Usage Guidelines