Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA2207 |
| Judul | Inisialisasi bidang statik jenis nilai sebaris |
| Golongan | Penggunaan |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | No |
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 eksplisit hanya dijamin berjalan sebelum konstruktor instans atau anggota statis jenis 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 berjalan sebelum bidang statis jenis 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.