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 9'da 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.
Not
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 none
olarak 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, UseReadOnly
kuralı ihlal eden bir türü ve kuralı karşılayan bir türü UseConstant
gö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";
}