CA2211: Bidang non-konstanta tidak boleh terlihat
Properti | Nilai |
---|---|
ID Aturan | CA2211 |
Judul | Bidang non-konstan tidak boleh terlihat |
Golongan | Penggunaan |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Bidang statis publik atau terproteksi tidak konstanta atau bersifat baca-saja.
Deskripsi aturan
Bidang statik yang bukan konstanta atau baca-saja tidak aman untuk alur. Akses ke bidang tersebut harus dikontrol dengan hati-hati dan memerlukan teknik pemrograman tingkat lanjut untuk menyinkronkan akses ke objek kelas. Karena ini adalah keterampilan yang sulit untuk dipelajari, dan menguji objek seperti itu menimbulkan tantangannya sendiri, bidang statis paling baik digunakan untuk menyimpan data yang tidak berubah. Aturan ini berlaku untuk pustaka; aplikasi tidak boleh mengekspos bidang apa pun.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, buat konstanta bidang statis atau baca-saja. Jika ini tidak memungkinkan, desain ulang jenis untuk menggunakan mekanisme alternatif seperti properti aman utas yang mengelola akses aman utas ke bidang yang mendasar. Sadari bahwa masalah seperti ketidakcocokan kunci dan kebuntuan dapat memengaruhi performa dan perilaku pustaka.
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini jika Anda mengembangkan aplikasi dan karena itu memiliki kontrol penuh atas akses ke jenis yang berisi bidang statis. Desainer pustaka tidak boleh menekan peringatan dari aturan ini; menggunakan bidang statis non-konstan dapat membuat penggunaan pustaka sulit digunakan pengembang dengan benar.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA2211
// The code that's violating the rule is on this line.
#pragma warning restore CA2211
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2211.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh
Contoh berikut menunjukkan jenis yang melanggar aturan ini.
Imports System
Namespace ca2211
Public Class SomeStaticFields
' Violates rule: AvoidNonConstantStatic;
' the field is public and not a literal.
Public Shared publicField As DateTime = DateTime.Now
' Satisfies rule: AvoidNonConstantStatic.
Public Shared ReadOnly literalField As DateTime = DateTime.Now
' Satisfies rule: NonConstantFieldsShouldNotBeVisible;
' the field is private.
Private Shared privateField As DateTime = DateTime.Now
End Class
End Namespace
public class SomeStaticFields
{
// Violates rule: AvoidNonConstantStatic;
// the field is public and not a literal.
static public DateTime publicField = DateTime.Now;
// Satisfies rule: AvoidNonConstantStatic.
public static readonly DateTime literalField = DateTime.Now;
// Satisfies rule: NonConstantFieldsShouldNotBeVisible;
// the field is private.
static DateTime privateField = DateTime.Now;
}