Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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 10'da varsayılan olarak etkin | Hayır |
Neden
Bir alan ve static (readonly ve Shared Visual Basic'te) bildirilir ReadOnly 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 static değiştiricilerini readonly 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ı
Genel veya dışarıdan görünür üyeler için static readonlyconst olarak değiştirmek sorunlara yol açabilir.
const değerleri derleme zamanında bağımlı derlemelere eklenir, bu nedenle kitaplığın değerindeki değişiklikler yayılmayabilir ve hatalara neden olabilir. Gelecekte üyenizin değeri değişebilirse, bu kuralı gizleyin.
Not
const kullanımı, private üyeler için güvenlidir ve internal aracılığıyla kullanıma sunulmadığı veya ayrı olarak dağıtılmadığı sürece InternalsVisibleTo üyeler için genel olarak 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 için, uyguladıkları tüm kurallar için veya bu kategorideki tüm kurallar için (Performans) yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli API yüzeylerini ekleme
api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını 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
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.
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";
}