"सी # भाषा विशिष्टता" संस्करण 5.0 के "10.12 स्टेटिक कंस्ट्रक्टर" खंड के अनुसार "स्थिर" संशोधक को "बाहरी" संशोधक के साथ चिह्नित किया जा सकता है और इस मामले में इसे बाह्य स्थैतिक कन्स्ट्रक्टर कहा जाता है।सी # में बाहरी स्थिर रचनाकारों का उद्देश्य क्या है?
सामान्य (गैर-बाहरी) स्थैतिक रचनाकार अच्छी तरह से जाने जाते हैं। वे स्थिर क्षेत्रों और गुणों को शुरू करने के लिए उपयोग किया जाता है।
बाहरी स्थैतिक विधियों को अक्सर पी/Invoke के माध्यम से देशी कार्यों को कॉल करने के लिए उपयोग किया जाता है।
और मुझे काफी गूढ़ बाहरी रचनाकारों के बारे में भी पता है (this question भी देखें)। उदाहरण के लिए, String
कक्षा में ऐसे declarations हैं, इन रचनाकारों को रनटाइम द्वारा कार्यान्वित किया जाता है।
लेकिन क्या बाहरी स्थिर रचनाकारों का कोई वास्तविक उपयोग है? मैंने coreclr repo के माध्यम से खोज की है और कुछ भी नहीं मिला है। भाषा विनिर्देश कुछ ऐसे निर्माणों का विवरण नहीं दे सका जो जंगली में कभी भी उपयोग नहीं किया गया है। या कर सकता था?
मेरा अनुमान है: सी # में बाहरी स्थैतिक रचनाकार हैं क्योंकि सीएलआर उनका समर्थन करता है (सिद्धांत रूप में)।
मुझे लगता है कि आपको 10.6 (विधि) से 10.13 (विध्वंसक) से धारा 10 के प्रत्येक उपधारा में पाठ का एक बहुत ही समान हिस्सा मिल जाएगा। यदि कुछ और नहीं, कम से कम यह * सुसंगत * है। –
एकमात्र चीज 'बाहरी' करता है विधि के आरवीए को 0 पर सेट किया जाता है। रनटाइम बाकी को जानने के लिए छोड़ दिया जाता है। Http://stackoverflow.com/q/38015024/ भी देखें। भाषा spec के लिए इसे कम करने का कोई कारण नहीं है क्योंकि संकलक के काम तुच्छ है (यह इसे अधिक करने के लिए और अधिक काम करेगा)। इसके अलावा, चूंकि रचनाकारों को 'DllImport' चिह्नित नहीं किया जा सकता है, इसलिए इस तरह के तरीकों को लागू करने का एकमात्र तरीका 'MethodImplOptions.InternalCall' के साथ है, इसलिए रनटाइम एकमात्र संभावित उपभोक्ता है, जिससे इसे स्पष्ट रूप से प्रतिबंधित करने के लिए भी कम दिलचस्प बना दिया जाता है। –
क्यों वे वास्तव में उपयोग नहीं किए जाते हैं, यह अटकलों के दायरे में जाता है, लेकिन अगर मैं एक सीएलआर कार्यान्वयनकर्ता था, तो मैं बजाय आर्केन नियमों पर भरोसा करने के बजाय स्पॉट्स की भविष्यवाणी करने में आसानी से अपना स्थिर प्रारंभ करना पसंद करूंगा स्थिर प्रकार के प्रारंभ के लिए। वह सभी कोड रनटाइम में वापस कॉल करता है, इसलिए यह कुछ भी नहीं करेगा लेकिन मेरी नौकरी को कठिन बना देगा। –