CA2207: Menginisialisasi bidang statik jenis nilai sebaris

Properti Nilai
ID Aturan CA2207
Judul Inisialisasi bidang statik jenis nilai sebaris
Kategori Penggunaan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Tidak
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Jenis nilai mendeklarasikan konstruktor statis eksplisit.

Deskripsi aturan

Ketika jenis nilai dideklarasikan, ia menjalani inisialisasi default di mana semua bidang jenis nilai diatur ke nol dan semua bidang jenis referensi diatur ke null (Nothing di Visual Basic). Konstruktor statis secara eksplisit hanya dijamin berjalan sebelum konstruktor instansi atau anggota statis dari tipe tersebut dipanggil. Oleh karena itu, jika jenis dibuat tanpa memanggil konstruktor instans, konstruktor statis tidak dijamin berjalan.

Jika semua data statis diinisialisasi sebaris dan tidak ada konstruktor statis eksplisit yang dideklarasikan, pengkompilasi C# dan Visual Basic menambahkan beforefieldinit bendera ke definisi kelas CIL. Pengkompilasi juga menambahkan konstruktor statis privat yang berisi kode inisialisasi statis. Konstruktor statis privat ini dijamin akan berjalan sebelum ada field statis dari tipe tersebut diakses.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini menginisialisasi semua data statis ketika dideklarasikan dan menghapus konstruktor statis.

Example

// This struct violates the rule.
struct BadStruct
{
    private static readonly int s_first;
    private static readonly int s_second;

    static BadStruct()
    {
        s_first = 1;
        s_second = 2;
    }

    // ...
}

// This struct satisfies the rule.
struct GoodStruct
{
    private static readonly int s_first = 1;
    private static readonly int s_second = 2;

    // ...
}

Kapan harus menekan peringatan

Jangan menyembunyikan peringatan dari aturan ini.

CA1810: Inisialisasi kolom statis tipe referensi secara sebaris