SORU
22 ŞUBAT 2012, ÇARŞAMBA


Nasıl statik oluşturucu çalışır?

namespace MyNameSpace
{
    static class MyClass
    {
        static MyClass()
        {
            //Authentication process.. User needs to enter password
        }

        public static void MyMethod()
        {
            //Depends on successful completion of constructor
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass.MyMethod();
        }
    }
}

Burada sanıyorum ki sırası

  1. Statik yapıcı başlayın
  2. Statik oluşturucu sonu
  3. Ana başlayın
  4. Başlangıç MyMethod
  5. Ana sonu

Eğer 4'ten önce başlayacak şimdi Eğer herhangi bir senaryoda 2 hapı yuttum. Mümkün mü?

CEVAP
22 ŞUBAT 2012, ÇARŞAMBA


Sana sadece bir soru sordum ama bir düzine ya bu sorular çok vargerekirsordum, hepsine cevap vereceğim.

Burada sanıyorum ki sırası

  1. Sınıf yapıcı (cctor) olarak bilinen başlar
  2. Cctor sonu
  3. Ana başlayın
  4. başlangıç MyMethod

Bu doğru mu?

Hayır. Doğru sıra:

  1. Eğer bir tane varsa başlangıç Programı için cctor,. Yok.
  2. Eğer bir tane varsa sonu Programı için cctor,. Yok.
  3. Ana başlayın
  4. Sınıfım için cctor başlangıç
  5. Son Sınıfım için cctor
  6. Başlangıç Sınıfım.MyMethod

Eğer statik alan bir başlatıcı varsa ne?

CLR içinde statik alan başlatıcılar bazı durumlarda çalıştırma sırasını değiştirmek için izin verilir. Ayrıntılı bilgi için: bu konuda Jon bu sayfaya bakın

The differences between static constructors and type initializers

Hiç sınıf cctor tamamlanmadan önce MyMethod gibi statik bir yöntem deniyor olabilir mi?

Evet.Bu cctor eğer cctor tamamlamadan önce, o halde MyMethod adı verilecek MyMethod kendisi çağırır.

Bu cctor MyMethod çağırmaz. Hiç Sınıfım bu cctor tamamlanmadan önce MyMethod gibi statik bir yöntem deniyor olabilir mi?

Evet.Eğer cctor kullanıyorsa MyMethod sonra MyMethod çağrıları olan başka bir tür Sınıfım cctor tamamlanmadan önce çağrılır.

Hayır cctors MyMethod, doğrudan ya da dolaylı olarak çağrı! Şimdi MyMethod gibi statik bir yöntem Sınıfım bu cctor tamamlanmadan önce olmasını hiç mümkün mü?

Hayır.

Yine de eğer birden çok iş parçacığı söz konusu olmasa bile, doğru mu?

Evet. Bu cctor statik yöntem herhangi bir konu üzerinde çağrılabilir önce bir iş parçacığı üzerinde bitirecek.

Bu cctor birden çok kez çağrılabilir? Hem cctor çalışmasına neden olacak iki iş parçacığı düşünelim.

Bu cctor çağrılacak en fazla bir kez, işin içinde ne kadar garantilidir. Eğer iki iş parçacığı çağrı MyMethod "aynı anda" o zaman yarış. Bunlardan biri Sınıfım cctor kazanan iplik tamamlanıncaya kadar ırk ve taşlarını kaybeder.

Kaybetme iplikengellerbu cctor bitene kadar?Gerçekten?

Gerçekten.

Üzerinde cctor ne varsakazananiş parçacığı bir kilidi daha önce atılan bu blok kodu çağırırkaybetmeiş parçacığı?

Sonra klasik kilit düzeni ters bir durum var. Program kilitlenmeleri. Sonsuza dek.

Bu tehlikeli görünüyor. Nasıl bu çıkmazdan kurtulabilir miyim?

İşte o zaman acı verirşunu yapmayı kes.Hiç bir cctor blok bir şey yok.

İyi bir fikir cctor başlatma anlambilim üzerine karmaşık güvenlik gereksinimlerini uygulamak için güvenmeye mi? Ve bu iyi bir fikir kullanıcı etkileşimleri yapan bir cctor var mı?

Ne güzel fikirler. Benim tavsiyem farklı metotlarla güvenliği etkileyen önkoşulları yerine getirilmesini sağlamak için bulmak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • Living Waters

    Living Water

    9 AĞUSTOS 2006
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008