2010-10-19 22 views
18

मैं सोच रहा था कि एक स्थैतिक चर (कक्षा में) चित्र में कब आता है (प्रारंभिक)? क्या इंस्टेंस कन्स्ट्रक्टर के बाद पहली बार या कक्षा लोड के बाद बुलाया गया है? कक्षा लोडिंग कब होती है?स्थिर चर को सी # में प्रारंभ कब किया जाता है?

+0

इस पर कई प्रश्नों में चर्चा की गई है, [स्थिर क्षेत्र प्रारंभिकरण सी # में कैसे काम करता है? ] (http://stackoverflow.com/questions/710793/how-does-static-field-initialization-work-in-c) और [सी # में स्थिर परिवर्तनीय प्रारंभिक क्रम क्या है? ] (http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c)। –

+1

@ मैथ्यू - अच्छे लिंक, लेकिन सीएलआई 4 के साथ वे गलत हो सकते हैं - या बल्कि: बिल्कुल * पूर्ण * नहीं; [यहां देखें] (http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx) –

उत्तर

25

ओह, यह जटिल है। यह इस बात पर निर्भर करता है कि beforefieldinit ध्वज सेट किया गया है, जो बदले में (सी # में) इस पर निर्भर करता है कि कोई स्थिर कन्स्ट्रक्टर है या नहीं। और बदतर; .NET 4 में मुझे विश्वास है कि व्यवहार इसे बदलने के बजाय इसे "आलसी" बनाने के लिए बदल गया है।

सचमुच, मैं यहां किसी विशिष्ट व्यवहार को कोड नहीं दूंगा; बस: जब तक आप उन्हें एक्सेस करने के लिए नियमित कोड का उपयोग करते हैं, तब तक उनका उपयोग करने का प्रयास करने से पहले स्थैतिक फ़ील्ड प्रारंभ किए जाएंगे।

जॉन स्कीट इस here और here

+2

+1 "मैं नहीं चाहता किसी भी विशिष्ट व्यवहार के लिए कोड ", बुद्धिमान सलाह – smirkingman

+1

" नियमित कोड "कवर क्या करता है? –

+1

@ डेविड सिफ्रिटास "सामान जो प्रतिबिंब नहीं है" (और अन्य चीट्स) –

-6

यह प्रोग्रामिंग भाषा और पर्यावरण पर निर्भर हो सकता है, लेकिन आमतौर पर स्थैतिक चर वर्ग लोड पर प्रारंभ किए जाते हैं।

0

स्थैतिक चर पर एक अच्छा लेख इसी वर्ग लोड हो रहा है के बाद चित्र में आता है। यह कन्स्ट्रक्टर कॉलिंग के बाद नहीं है, क्योंकि जब हम कक्षा के ऑब्जेक्ट को बनाने के लिए नए ऑपरेटर का उपयोग कर रहे हैं तो कन्स्ट्रक्टर कॉलिंग खेल में आती है और स्थिर चर वर्ग स्तर पर ऑब्जेक्ट स्तर पर उपलब्ध नहीं होते हैं।

संबंधित मुद्दे