हां, स्थैतिक कन्स्ट्रक्टर को प्रत्येक बंद वर्ग प्रकार (टाइप प्रकार पैरामीटर निर्दिष्ट करते समय बनाए गए प्रकार) के लिए एक बार बुलाया जाएगा। C# 3 specification, §10.12 स्टेटिक कन्स्ट्रक्टर देखें।
एक बंद वर्ग प्रकार के लिए स्थिर कन्स्ट्रक्टर किसी दिए गए एप्लिकेशन डोमेन में सबसे अधिक बार निष्पादित करता है।
और यह भी:
क्योंकि स्थिर निर्माता ठीक एक बार प्रत्येक निर्माण बंद के लिए वर्ग प्रकार क्रियान्वित किया जाता है, यह प्रकार पैरामीटर है कि कम से जाँच नहीं की जा सकती है, पर चलाने के समय के चेक को लागू करने के लिए एक सुविधाजनक जगह है बाधाओं के माध्यम से संकलन समय (§10.1.5)। उदाहरण के लिए, निम्न प्रकार लागू करने के लिए उस प्रकार तर्क एक enum है एक स्थिर निर्माता का उपयोग करता है:
class Gen<T> where T: struct
{
static Gen() {
if (!typeof(T).IsEnum) {
throw new ArgumentException("T must be an enum");
}
}
}
यह भी पढ़ने के लिए §4.4.2 ओपन प्रासंगिक है और प्रकार के बंद कर दिया:
रन-टाइम पर, सामान्य प्रकार की घोषणा के भीतर सभी कोड सामान्य बंद करने के लिए प्रकार तर्कों को लागू करके बनाए गए बंद प्रकार के संदर्भ में निष्पादित किए जाते हैं। जेनेरिक प्रकार के भीतर प्रत्येक प्रकार पैरामीटर एक विशेष रन-टाइम प्रकार से बंधे होते हैं। सभी बयानों और अभिव्यक्तियों की रन-टाइम प्रोसेसिंग हमेशा बंद प्रकारों के साथ होती है, और खुले प्रकार केवल संकलन-समय प्रसंस्करण के दौरान होते हैं।
प्रत्येक बंद निर्मित प्रकार का स्थिर चर का अपना सेट होता है, जिसे किसी अन्य बंद निर्मित प्रकारों के साथ साझा नहीं किया जाता है।
इस कार्यक्रम कि आप अपने आप चला सकते हैं यह दर्शाता है कि स्थिर निर्माता तीन बार ही नहीं, एक बार कहा जाता है:
public class Program
{
class SomeGenericClass<T>
{
static SomeGenericClass()
{
Console.WriteLine(typeof(T));
}
}
class Baz { }
static void Main(string[] args)
{
SomeGenericClass<int> foo = new SomeGenericClass<int>();
SomeGenericClass<string> bar = new SomeGenericClass<string>();
SomeGenericClass<Baz> baz = new SomeGenericClass<Baz>();
}
}
आउटपुट:
System.Int32
System.String
Program+Baz
स्रोत
2010-05-29 21:00:38
यह एक स्थिर वर्ग कैसा है? –
@ जौके वैन डेर मास, जिन्होंने एक स्थिर वर्ग के बारे में बात की थी? सवाल एक सामान्य वर्ग के स्थैतिक कन्स्ट्रक्टर के बारे में है, स्थिर वर्ग नहीं ... –
यह न तो था, इसलिए यह अभी भी लागू होता है :) –