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