Aracılığıyla paylaş


CA1802: Uygun Yerlerde Sabitleri Kullan

Özellik Değer
Kural Kimliği CA1802
Başlık Uygun yerlerde sabitleri kullanın
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Hayır

Neden

Bir alan ve readonly (Shared ve ReadOnly Visual Basic'te) bildirilir static ve derleme zamanında hesaplamalı bir değerle başlatılır.

Varsayılan olarak, bu kural yalnızca dışarıdan görünen, statik, salt okunur alanlara bakar, ancak bu yapılandırılabilir.

Kural açıklaması

Bir alanın değeri static readonly , bildirim türü için statik oluşturucu çağrıldığında çalışma zamanında hesaplanır. static readonly Alan bildirildiğinde başlatılırsa ve statik bir oluşturucu açıkça bildirilmemişse, derleyici alanı başlatmak için statik bir oluşturucu yayar.

Bir alanın değeri const derleme zamanında hesaplanır ve meta verilerde depolanır ve bu da bir static readonly alanla karşılaştırıldığında çalışma zamanı performansını artırır.

Hedeflenen alana atanan değer derleme zamanında hesaplanabilir olduğundan, değerin çalışma zamanı yerine derleme zamanında hesaplanabilmesi için bildirimi bir const alan olarak değiştirin.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için ve readonly değiştiricilerini static değiştiriciyle const değiştirin.

Dekont

Const değiştiricisinin kullanılması tüm senaryolar için önerilmez.

Uyarıların ne zaman bastırılması gerekiyor?

Performans önemli değilse, bu kuraldan gelen bir uyarıyı engellemek veya kuralı devre dışı bırakmak güvenlidir.

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 CA1802
// The code that's violating the rule is on this line.
#pragma warning restore CA1802

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.CA1802.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Çözümlemek için kod yapılandırma

Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçenekleri kullanın.

Bu seçenekleri yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Performans) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.

Belirli API yüzeylerini ekleme

Bu kuralın üzerinde çalıştırılacak kod tabanınızın hangi bölümlerini erişilebilirliklerine göre yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Gerekli değiştiriciler

Bu kuralı gerekli alan değiştiricileri geçersiz kacak şekilde yapılandırabilirsiniz. Varsayılan olarak static ve readonly her ikisi de analiz edilen alanlar için gerekli değiştiricilerdir. Bunu, aşağıdaki tabloda yer alan bir veya daha fazla değiştirici değerden oluşan virgülle ayrılmış olarak geçersiz kılabilirsiniz:

Seçenek Değeri Özet
none Değiştirici gereksinimi yok.
static veya Shared Visual Basic'te 'statik' ('Paylaşılan' olarak bildirilmelidir.
const 'const' olarak bildirilmelidir.
readonly 'salt okunur' olarak bildirilmelidir.

Örneğin, kuralın hem statik hem de örnek alanlarında çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CA1802.required_modifiers = none

Örnek

Aşağıdaki örnekte, UseReadOnlykuralı ihlal eden bir türü ve kuralı karşılayan bir türü UseConstantgösterilir.

Imports System

Namespace ca1802

    ' This class violates the rule.
    Public Class UseReadOnly

        Shared ReadOnly x As Integer = 3
        Shared ReadOnly y As Double = x + 2.1
        Shared ReadOnly s As String = "readonly"

    End Class

    ' This class satisfies the rule.
    Public Class UseConstant

        Const x As Integer = 3
        Const y As Double = x + 2.1
        Const s As String = "const"

    End Class

End Namespace
// This class violates the rule.
public class UseReadOnly
{
    static readonly int x = 3;
    static readonly double y = x + 2.1;
    static readonly string s = "readonly";

    public void Print()
    {
        Console.WriteLine(s);
    }
}

// This class satisfies the rule.
public class UseConstant
{
    const int x = 3;
    const double y = x + 2.1;
    const string s = "const";
}