Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kegunaan pembina statik dalam C#?

Apakah kegunaan pembina statik dalam C#?

WBOY
WBOYke hadapan
2023-08-23 22:25:02857semak imbas

Apakah kegunaan pembina statik dalam C#?

Pembina statik digunakan untuk memulakan sebarang data statik, atau melaksanakan operasi tertentu Kandungan yang perlu diterjemahkan ialah: Operasi yang dilakukan secara automatik sebelum panggilan pertama Apabila contoh dibuat atau mana-mana ahli statik dirujuk.

Pembina statik sangat berguna apabila membuat kelas pembalut untuk kod tidak terurus, Apabila pembina boleh memanggil kaedah LoadLibrary. Perkara yang sama berlaku untuk pembina statik Tempat yang sesuai untuk menguatkuasakan parameter jenis yang tidak boleh disemak pada masa jalan Kekangan disemak pada masa penyusunan.

Pembina statik mempunyai sifat berikut −

  • Pembina statik tidak menerima pengubah suai atau parameter akses.

  • Sesuatu kelas atau struktur hanya boleh mempunyai satu pembina statik.

  • Pembina statik tidak boleh diwarisi atau terlebih beban.

  • Pembina statik tidak boleh dipanggil terus, ia hanya boleh dipanggil melalui kaedah lain

Masa Jalan Bahasa Biasa (CLR). Ia akan dipanggil secara automatik.
  • Pengguna tidak mempunyai kawalan ke atas apabila pembina statik dilaksanakan program.

  • Pembina statik dipanggil secara automatik sebelum memulakan kelas Contoh pertama dibuat atau merujuk mana-mana ahli statik. statik Pembina akan dijalankan sebelum pembina contoh. jenis pembina statik Dipanggil apabila kaedah statik diberikan kepada acara atau perwakilan dan dipanggil Dan bukan apabila ditugaskan. Jika pemula pembolehubah medan statik wujud dalam kelas pembina statik, ia akan dilaksanakan dalam susunan teks dalam Kelas dengan pembina statik yang akan dilaksanakan dalam susunan teks Mereka muncul dalam pengisytiharan kelas sebelum pelaksanaan Jika anda tidak menyediakan pembina statik untuk memulakan medan statik, semua medan statik akan dimulakan secara automatik pada akses pertama dalam susunan di mana ia diisytiharkan.

  • Medan dimulakan kepada nilainya yang disenaraikan dalam Nilai Lalai dalam C# Jika pembina statik melemparkan pengecualian, ia tidak akan dipanggil oleh masa jalan kali kedua, dan jenis itu akan kekal tidak dimulakan sepanjang hayatnya Domain aplikasi tempat program anda dijalankan. Lazimnya, a TypeInitializationException berlaku apabila pembina statik dilemparkan Tidak dapat membuat instantiate jenis atau apabila pengecualian yang tidak dikendalikan berlaku Pembina statik. Untuk pembina statik tersirat yang tidak ditakrifkan secara eksplisit Ditakrifkan dalam kod sumber, penyelesaian masalah mungkin memerlukan pemeriksaan Kod bahasa perantaraan (IL).
  • Kehadiran pembina statik akan menghalang penambahan Harta jenis BeforeFieldInit. Ini mengehadkan pengoptimuman masa jalan.

  • Sesuatu medan yang diisytiharkan sebagai statik baca sahaja hanya boleh ditetapkan sebagai sebahagian daripadanya dalam pengisytiharan atau pembina statik. Apabila tiada pembina statik yang jelas Kandungan yang perlu diterjemahkan ialah: diperlukan, mulakan medan statik pada pengisytiharan, bukannya melalui statik Kandungan yang perlu diterjemahkan ialah: diperlukan, mulakan medan statik pada pengisytiharan, bukannya melalui statik Pembina digunakan untuk pengoptimuman masa jalan yang lebih baik.

  • Contoh

    Demonstrasi Langsung

    using System;
    namespace DemoApplication{
       public class Program{
          static void Main(string[] args){
             Car user = new Car();
             Car user1 = new Car();
             Console.ReadLine();
          }
       }
       public class Car{
          static Car(){
             Console.WriteLine("Static constructor called");
          }
          public Car(){
             Console.WriteLine("Default constructor called");
          }
       }
    }

    Output

    Static constructor called
    Default constructor called
    Default constructor called

    Dalam contoh di atas, kita dapat melihat bahawa pembina statik dipanggil sekali sahaja.

    Contoh

    Demonstrasi dalam talian

    using System;
    using System.Threading;
    namespace DemoApplication{
       public class Car{
          protected static readonly DateTime globalStartTime;
          protected int RouteNumber { get; set; }
          static Car(){
             globalStartTime = DateTime.Now;
             Console.WriteLine($"Static constructor called. Global start time:
             {globalStartTime.ToLongTimeString()}");
          }
          public Car(int routeNum){
             RouteNumber = routeNum;
             Console.WriteLine($"Car {RouteNumber} is created.");
          }
          public void Drive(){
             TimeSpan elapsedTime = DateTime.Now - globalStartTime;
             Console.WriteLine($"Car {this.RouteNumber} is starting its route
             {elapsedTime.Milliseconds} minutes after global start time
             {globalStartTime.ToShortTimeString()}.");
          }
       }
       class TestCar{
          static void Main(){
             Car car1 = new Car(1);
             Car car2 = new Car(2);
             car1.Drive();
             Thread.Sleep(25);
             car2.Drive();
             Console.ReadLine();
          }
       }
    }

    Output

    Static constructor called. Global start time:
    7:09:06 AM
    Car 1 is created.
    Car 2 is created.
    Car 1 is starting its route25 minutes after global start time7:09 AM.
    Car 2 is starting its route50 minutes after global start time7:09 AM.

    Atas ialah kandungan terperinci Apakah kegunaan pembina statik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam