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 8'de 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 noneolarak 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; }

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

Ayrıca bkz.