CA2211: Bidang non-konstanta tidak boleh terlihat

Properti Nilai
ID Aturan CA2211
Judul Bidang non-konstan tidak boleh terlihat
Kategori Penggunaan
Perbaikan bersifat merusak atau tidak merusak Merusak
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

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, ubah bidang statis menjadi konstanta atau hanya-baca. Jika ini tidak memungkinkan, rancang ulang tipe untuk menggunakan mekanisme alternatif seperti properti thread-safe yang mengelola akses thread-safe ke lapangan yang mendasarinya. 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 dengan demikian memiliki kontrol penuh atas akses ke tipe yang berisi bidang statis. Desainer pustaka tidak boleh mengabaikan peringatan dari aturan ini; menggunakan bidang statis non-konstan dapat mempersulit pengembang dalam menggunakan pustaka 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;
}