Rumah > pembangunan bahagian belakang > C++ > Adakah Perintah Permulaan Kelas Statik C# Boleh Diramalkan?

Adakah Perintah Permulaan Kelas Statik C# Boleh Diramalkan?

DDD
Lepaskan: 2025-01-04 20:15:41
asal
860 orang telah melayarinya

Is C#'s Static Class Initialization Order Predictable?

Adakah Susunan Permulaan Kelas Statik dalam C# Deterministik?

Turutan permulaan kelas statik dalam C# sememangnya deterministik. Menurut piawai ECMA-334:

  • Pemula medan statik dilaksanakan serta-merta sebelum pembina statik.
  • Pelaksanaan pembina statik dicetuskan oleh penggunaan pertama medan statik atau apabila tika kelas dibuat.
  • Jika kelas mengandungi Main(), ia statik pembina dijalankan sebelum Main() dipanggil.

Contoh Susunan Permulaan

Pertimbangkan kod berikut:

static class B
{
    public static int X = 7;
    static B()
    {
        Console.WriteLine("B.X = " + X);
        X = A.X;
        Console.WriteLine("B.X = " + X);
    }
}

static class A
{
    public static int X = B.X + 1;
    static A() { Console.WriteLine("A.X = " + X); }
}

static class Program
{
    static void Main()
    {
        Console.WriteLine("A = {0}, B = {1}", A.X, B.X);
    }
}
Salin selepas log masuk

Perintah Pelaksanaan

  1. A.X digunakan dalam Main(), mencetuskan pemulaan A().
  2. A().Pemulaan X memerlukan B.X, memanggil B().
  3. B().X dimulakan kepada 7 (Console.WriteLine("B.X = 7")).
  4. B().X diubah suai dan Console.WriteLine("B.X = 0") ialah dilaksanakan.
  5. A().X ditetapkan kepada B.X 1 (Console.WriteLine("A.X = 1")).
  6. Console.WriteLine("A = 1, B = 0" ) ialah output.

Susunan semula Pertimbangan

Walaupun kelas A dan B disusun semula, susunan permulaan tetap sama kerana penggunaan pertama A.X mencetuskan rantaian permulaan.

Kesimpulan

Tertib permulaan kelas statik adalah deterministik dan mengikut peraturan yang digariskan dalam Piawaian ECMA-334. Penggunaan pertama ahli statik atau penciptaan tika akan mencetuskan proses pemula, yang diteruskan dalam susunan pemula medan diikuti oleh pembina statik.

Atas ialah kandungan terperinci Adakah Perintah Permulaan Kelas Statik C# Boleh Diramalkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan