2011-06-16 13 views
5

Statik kurucu, sınıfa çağrılana kadar statik okuma dizisinin String oluşturulmayacağı anlayışım. Ancak, statik yapıcıdan biri statik yöntemlerden veya değişkenlerden birine erişilinceye kadar çağrılmaz.C# - Statik readonly dizeleri - multithread konularına girmek mümkün mü?

Çok iş parçacıklı bir ortamda, bunun yüzünden sorun yaşanabilir mi? Temel olarak, varsayılan tekil kilitli statik yapıcı mı yoksa bunu kendim mi yapmalıyım? Yani ... Ben şu yapmak zorundayım:

private static Object MyLock; 

static MyClass() 
{ 
    lock(MyLock) 
    { 
     if (MyStringValue == null) 
      MyStringValue = GenerateString(); 
    } 
} 
+0

olası kopyası [C# statik yapıcı dizisi güvenli midir?] (Http://stackoverflow.com/questions/7095/is-the-c-static-constructor-thread-safe) –

cevap

8

statik yapıcı sadece bir kere türü başına çalıştırmak için garanti edilir. Yani kilitlemene ihtiyacın yok.

Her bir jenerik parametre için bir kez çalışacağını unutmayın. Ve genel sınıftaki statik alanlar da farklı jenerik parametreler arasında paylaşılmaz.

1

Bundan kaçınmak için, değeri önbelleğe alınan değeri döndüren bir getirilayıcılı bir statik özellik yapmıyorsunuz. Mülkle erişim, statik kurucunun önce kaçmasını sağlar.

İlgili konular