CA1019: Öznitelik bağımsız değişkenleri için erişimcileri tanımlayın
Özellik | Değer |
---|---|
Kural Kimliği | CA1019 |
Başlık | Öznitelik bağımsız değişkenleri için erişimciler tanımlayın |
Kategori | Tasarım |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Bir öznitelik, oluşturucusunda karşılık gelen özelliklere sahip olmayan bağımsız değişkenleri tanımlar.
Kural açıklaması
Öznitelikler özniteliği işaretlediğinizde özelleştirilen zorunlu bağımsız değişkenleri tanımlayabilir. Ayrıca bunlar konum parametreleri olarak öznitelik yapıcısına verildiğinden duruma bağlı bağımsız değişkenler olarak da bilinirler. Zorunlu her bağımsız değişken için bağımsız değişkenin değeri yürütme zamanından alınması gerektiğinden öznitelik ilgili salt okunur özelliği de sağlamalıdır. Bu kural, her oluşturucu parametresi için ilgili özelliği tanımlamış olduğunuzu denetler.
Öznitelikler adlandırılmış bağımsız değişkenler olarak bilinen duruma bağlı bağımsız değişkenler olarak da tanımlanabilir. 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ı bağımsız değişkenler için, karşılık gelen özellikler ve oluşturucu parametreleri aynı adı, ancak farklı büyük/küçük harf kullanımını kullanmalıdır. Özellikler Pascal büyük/küçük harf kullanır ve parametrelerde deve kasası kullanılır.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için, bir tane içermeyen her oluşturucu parametresi için salt okunur bir özellik ekleyin.
Uyarıların ne zaman bastırılması gerekiyor?
Zorunlu bağımsız değişkenin değerinin alınabilir olmasını istemiyorsanız, bu kuraldan bir uyarıyı gizleyin.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1019
// The code that's violating the rule is on this line.
#pragma warning restore CA1019
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1019.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Örnekler
Özel öznitelikler
Aşağıdaki örnekte, zorunlu (konumsal) parametre tanımlayan iki öznitelik gösterilmektedir. özniteliğinin ilk uygulaması yanlış tanımlanmış. İkinci uygulama doğrudur.
// Violates rule: DefineAccessorsForAttributeArguments.
[AttributeUsage(AttributeTargets.All)]
public sealed class BadCustomAttribute : Attribute
{
string _data;
// Missing the property that corresponds to
// the someStringData constructor parameter.
public BadCustomAttribute(string someStringData)
{
_data = someStringData;
}
}
// Satisfies rule: Attributes should have accessors for all arguments.
[AttributeUsage(AttributeTargets.All)]
public sealed class GoodCustomAttribute : Attribute
{
public GoodCustomAttribute(string someStringData)
{
SomeStringData = someStringData;
}
//The constructor parameter and property
//name are the same except for case.
public string SomeStringData { get; }
}
Imports System
Namespace ca1019
' Violates rule: DefineAccessorsForAttributeArguments.
<AttributeUsage(AttributeTargets.All)>
Public NotInheritable 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)>
Public NotInheritable Class GoodCustomAttribute
Inherits Attribute
Public Sub New(someStringData As String)
Me.SomeStringData = someStringData
End Sub 'New
'The constructor parameter and property
'name are the same except for case.
Public ReadOnly Property SomeStringData() As String
End Class
End Namespace
Konumsal ve adlandırılmış bağımsız değişkenler
Konumsal ve adlandırılmış bağımsız değişkenler, kitaplığınızın tüketicilerine hangi bağımsız değişkenlerin öznitelik için zorunlu olduğunu ve hangi bağımsız değişkenlerin isteğe bağlı olduğunu açıkça gösterir.
Aşağıdaki örnekte, hem konumsal hem de adlandırılmış bağımsız değişkenleri olan bir özniteliğin uygulaması gösterilmektedir:
[AttributeUsage(AttributeTargets.All)]
public sealed class GoodCustomAttribute : Attribute
{
public GoodCustomAttribute(string mandatoryData)
{
MandatoryData = mandatoryData;
}
public string MandatoryData { get; }
public string? OptionalData { get; set; }
}
Aşağıdaki örnekte, özel özniteliğin iki özelliğe nasıl uygulanacağı gösterilmektedir:
[GoodCustomAttribute("ThisIsSomeMandatoryData", OptionalData = "ThisIsSomeOptionalData")]
public string? MyProperty { get; set; }
[GoodCustomAttribute("ThisIsSomeMoreMandatoryData")]
public string? MyOtherProperty { get; set; }
İlgili kurallar
CA1813: Korumasız özniteliklerden kaçının