Aracılığıyla paylaş


Statik Kurucular (C# Programlama Kılavuzu)

Statik oluşturucu herhangi başlatmak için kullanılan statik verileri veya yalnızca bir kez yapılması gereken belirli bir eylemi gerçekleştirmek için.İlk örneği oluşturulur veya statik bir üye başvurulan önce otomatik olarak adlandırılır.

class SimpleClass
{
    // Static variable that must be initialized at run time.
    static readonly long baseline;

    // Static constructor is called at most one time, before any
    // instance constructor is invoked or member is accessed.
    static SimpleClass()
    {
        baseline = DateTime.Now.Ticks;
    }
}

Statik Kurucular aşağıdaki özelliklere sahiptir:

  • Statik oluşturucu olmayan erişim değiştiricileri alabilir veya parametrelere sahiptir.

  • Statik oluşturucu otomatik olarak başlatmak için çağrılır sınıfı ilk örneği oluşturulur veya statik bir üye başvurulan önce.

  • Statik oluşturucu doğrudan çağrılamaz.

  • Kullanıcının statik oluşturucu programı ne zaman yürütülen üzerinde denetimi yoktur.

  • Bir normal statik Kurucular sınıfı, bir günlük dosyası kullanan ve yapıcı girişleri bu dosyayı yazmak için kullanıldığında kullanılır.

  • Statik Kurucular da yararlı kurucusunu çağırmak, yönetilmeyen kod için sarıcı sınıflar oluşturmak, LoadLibrary yöntemi.

  • Statik oluşturucu özel durum oluşturursa, çalışma zamanı, ikinci kez çağıracağı değil ve programınızın çalıştığı uygulama etki alanı yaşam için başlatılmamış kalır.

Örnek

Bu örnekte, sınıf Bus statik oluşturucuya sahiptir.Zaman ilk örneğini Bus oluşturulur (bus1), statik oluşturucu sınıf başlatmak için çağrılır.Örnek Çıktı statik oluşturucu yalnızca bir kez bile iki örneğini çalıştığını doğrular Bus oluşturulan ve örnek oluşturucu çalışmadan önce çalıştırır.

    public class Bus
    {
        // Static variable used by all Bus instances.
        // Represents the time the first bus of the day starts its route.
        protected static readonly DateTime globalStartTime;

        // Property for the number of each bus.
        protected int RouteNumber { get; set; }

        // Static constructor to initialize the static variable.
        // It is invoked before the first instance constructor is run.
        static Bus()
        {
            globalStartTime = DateTime.Now;

            // The following statement produces the first line of output, 
            // and the line occurs only once.
            Console.WriteLine("Static constructor sets global start time to {0}",
                globalStartTime.ToLongTimeString());
        }

        // Instance constructor.
        public Bus(int routeNum)
        {
            RouteNumber = routeNum;
            Console.WriteLine("Bus #{0} is created.", RouteNumber);
        }

        // Instance method.
        public void Drive()
        {
            TimeSpan elapsedTime = DateTime.Now - globalStartTime;

            // For demonstration purposes we treat milliseconds as minutes to simulate
            // actual bus times. Do not do this in your actual bus schedule program!
            Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}.",
                                    this.RouteNumber,
                                    elapsedTime.TotalMilliseconds,
                                    globalStartTime.ToShortTimeString());
        }
    }

    class TestBus
    {
        static void Main()
        {
            // The creation of this instance activates the static constructor.
            Bus bus1 = new Bus(71);

            // Create a second bus.
            Bus bus2 = new Bus(72);

            // Send bus1 on its way.
            bus1.Drive();

            // Wait for bus2 to warm up.
            System.Threading.Thread.Sleep(25);

            // Send bus2 on its way.
            bus2.Drive();

            // Keep the console window open in debug mode.
            System.Console.WriteLine("Press any key to exit.");
            System.Console.ReadKey();
        }
    }
    /* Sample output:
        Static constructor sets global start time to 3:57:08 PM.
        Bus #71 is created.
        Bus #72 is created.
        71 is starting its route 6.00 minutes after global start time 3:57 PM.
        72 is starting its route 31.00 minutes after global start time 3:57 PM.      
   */

Ayrıca bkz.

Başvuru

Sınıflar ve yapılar (C# Programlama Kılavuzu)

Kurucular (C# Programlama Kılavuzu)

Statik sınıflar ve statik sınıf üyelerini (C# Programlama Kılavuzu)

Yıkıcı (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu