जब आप किसी वर्ग का उदाहरण बनाते हैं, तो उस उदाहरण के सभी चर उस उदाहरण के लिए विशिष्ट होते हैं और जब आवंटन का दायरा समाप्त होता है तो उसे मार दिया जाता है। लेकिन यह एक स्थिर विधि में कैसे काम करता है? मान लीजिए कि दो लोग सिस्टम एक ही समय में System.Math.Abs () को कॉल करते हैं। रनटाइम दो कॉलर्स के बीच अंतर कैसे करता है? क्या यह थ्रेडिंग आता है? अलग-अलग थ्रेड स्वचालित रूप से प्रत्येक कॉलर के लिए बनाए जाते हैं?क्या होता है जब आप सी # में एक स्थिर विधि कहते हैं?
उत्तर
विधि-परिवर्तनीय जीवनकाल के मामले में स्थिर और गैर स्थैतिक तरीकों के बीच कोई वास्तविक अंतर नहीं है। दोनों मामलों में, एक कार्यान्वयन विवरण के रूप में, स्थानीय लोग आम तौर पर स्टैक पर आवंटित (हमेशा अपवाद नहीं होते हैं) अपवादित होते हैं। ढेर प्रति थ्रेड है, इसलिए स्थानीय विधि चर धागे के बीच क्रॉसओवर नहीं है।
फर्क सिर्फ इतना है यहाँ उदाहरण और स्थिर के बीच कि उदाहरण के तरीकों, उर्फ "यह", कॉल करने वाले को धकेल दिया जाता है (प्लस कुछ आभासी प्रेषण और अशक्त-जाँच मज़ा) एक अंतर्निहित zeroth पैरामीटर है।
सादगी के लिए, मैं iterator ब्लॉक, पर कब्जा कर लिया चर, आदि पर glossing रहा हूँ
धन्यवाद मार्क! – developer747
कक्षा के सभी स्थिर सदस्य मौजूद हैं, भले ही कक्षा का कोई उदाहरण मौजूद न हो। वे पहले उपयोग से पहले कुछ समय पहले शुरू हो जाते हैं और प्रोग्राम पूरा होने पर साफ़ हो जाते हैं।
यदि आपके पास एक स्थिर विधि के लिए दो एक साथ कॉल हैं, तो वे कक्षा के किसी भी स्थिर सदस्यों (यदि वे उनका उपयोग करते हैं) की एक ही प्रति के साथ काम करेंगे। इसलिए यदि स्थिर विधि स्थिर सदस्य (या पैरामीटर) पर चलती है, तो इसे थ्रेड सुरक्षित तरीके से करना चाहिए। यदि स्थैतिक विधि केवल स्थानीय लोगों पर ही चलती है तो विधि स्वयं आमतौर पर थ्रेड सुरक्षित होती है।
रनटाइम दो कॉलर्स के बीच अंतर कैसे करता है, यह थ्रेडिंग का सार है। प्रत्येक धागे का अपना कॉल स्टैक किसी भी स्थानीय चर, पैरामीटर, रिटर्न एड्रेस इत्यादि की अपनी प्रतिलिपि के साथ होता है, इसलिए दो कॉल उलझन में नहीं आती हैं और प्रत्येक अपने कॉलर पर सही तरीके से लौटती है। एकमात्र चिंता, फिर से, यह है कि स्थिर विधि स्थिर सदस्य पर चलती है जो थ्रेड सुरक्षित नहीं है (या पैरामीटर जो थ्रेड सुरक्षित नहीं है)।
अच्छी व्याख्या जेम्स। धन्यवाद। लोग कैसे जानते हैं कि आपने मुझे अभी क्या बताया है? क्या आप कुछ अच्छी किताब की सिफारिश कर सकते हैं, जो इस तरह के मूलभूत सिद्धांतों को संबोधित करते हैं? – developer747
इनमें से अधिकांश मैंने केवल सीखा प्रोग्रामिंग भाषा सिद्धांत और प्रोग्रामिंग भाषाओं के आत्म-अध्ययन से कॉम्पसी coursework में मेरा बीएस। यदि आप वास्तव में विवरण में शामिल होना चाहते हैं, तो सी # भाषा विशिष्टता पढ़ें, यह आपको कार्यान्वयन के बारे में जानने के लिए सबकुछ बताएगा: http: //msdn.microsoft.com/en-us/library/ms228593.aspx –
यदि आपको अपने अंडरग्रेड (जो इस तरह के मौलिक सिद्धांतों को संबोधित करते हैं) से एक पुस्तक की सिफारिश करनी है तो यह क्या होगा? – developer747
जब आप एक वर्ग का एक उदाहरण बनाने के लिए, यह सब उदाहरण के लिए विशिष्ट चर मारे गए हैं जब उदाहरण से बाहर है गुंजाइश।
चर - आम तौर पर कहा जाता है "फील्ड" उदाहरण केजीवन के बाद पुनः आवंटित की जाती रहे हैं। स्कोप प्रोग्राम टेक्स्ट का क्षेत्र है जिसमें संकलक इसके नाम से कुछ पहचानता है; लिफ्टटाइमसमय का हिस्सा है जिसके दौरान एक संग्रहण स्थान मान्य है। दायरा और जीवनकाल अक्सर भ्रमित होते हैं।
लेकिन यह एक स्थिर विधि में कैसे काम करता है?
स्टेटिक फ़ील्ड में असंबद्ध जीवनकाल है; भंडारण स्थान कुछ समय पहले बनाया गया है जब तक कि क्षेत्र का उपयोग नहीं किया जाता है और तब तक नष्ट नहीं होता जब तक कि पेट काटा नहीं जाता है।
मान लीजिए कि दो लोग सिस्टम एक ही समय में System.Math.Abs () को कॉल करते हैं।
ठीक है। आप कैसे प्रस्तावित करते हैं कि ऐसा होता है?
रनटाइम दो कॉलर्स के बीच अंतर कैसे करता है? क्या यह थ्रेडिंग आता है?
स्थैतिक विधि मशीन निर्देशों के समूह में लगाई गई है जो स्मृति में संख्याएं हैं। निष्पादन के प्रत्येक धागे में निर्देश सूचक नामक एक संख्या है जो वर्तमान निर्देश का पता लगाती है। दो अलग-अलग धागे दोनों में निर्देश पॉइंटर्स हो सकते हैं जो एक ही समय में एक ही स्थिर विधि के अंदर हैं।
प्रत्येक कॉलर के लिए स्वचालित रूप से अलग थ्रेड बनाए जाते हैं?
प्रश्न कोई समझ नहीं आता है। पर दो कॉलर कैसे प्राप्त हुए थे यदि वे पहले से ही अलग थ्रेड पर नहीं थे?
- 1. कैसे आप एक स्थिर विधि
- 2. जब आप कहते हैं कि कोड विरासत कोड है?
- 3. जब आप कोई प्रोग्राम चलाते हैं तो क्या होता है?
- 4. क्या होता है जब आप 'अगर कुंजी में कुंजी'
- 5. स्मृति में क्या होता है जब एक सी ++ वर्ग तत्काल
- 6. क्या होता है जब एक शून्य विधि संदर्भ का उपयोग कर एक स्थिर विधि का आह्वान किया जाता है?
- 7. आप रूबी में ऑपरेटर को क्या कहते हैं?
- 8. सी # में, जब आप किसी शून्य ऑब्जेक्ट पर एक्सटेंशन विधि को कॉल करते हैं तो क्या होता है?
- 9. यदि आप जावा में क्लोन नहीं करते हैं तो आप क्या करते हैं और आप इसे क्या कहते हैं?
- 10. असाइनमेंट ऑपरेटर क्या है <- जब आप इसे ज़ोर से कहते हैं तो कहा जाता है?
- 11. जब लोग कहते हैं कि सी ++ में "अनावश्यक व्याकरण" है तो लोगों का क्या अर्थ है?
- 12. क्या होता है जब प्रदाता प्रदाता F # में बदलते हैं?
- 13. जब आप GetType() करते हैं तो वास्तव में क्या होता है?
- 14. @ एक स्थिर विधि
- 15. जब आप सामग्री को जोड़ने के लिए उपयोग करते हैं तो आप << ऑपरेटर रूबी में क्या कहते हैं?
- 16. क्या एक स्थिर विधि धागे में जावा सरणी सुरक्षित हैं?
- 17. क्या होता है जब एक .NET अनुप्रयोग शुरू होता है?
- 18. सी ++ स्थिर विधि
- 19. जब आप एक आईओएस ऐप अपडेट करते हैं, तो दस्तावेज़ फ़ोल्डर सामग्री का क्या होता है?
- 20. जब आप बैकबोन मॉडल को सहेजते हैं तो वास्तव में क्या होता है?
- 21. पायथन में, जब आप किसी फ़ंक्शन के अंदर आयात करते हैं तो क्या होता है?
- 22. जब आप ऐप्पल के आईट्यून्स कनेक्ट में बाइनरी अपलोड करते हैं तो क्या होता है?
- 23. आप IENumerable <Foo> पर क्या कहते हैं?
- 24. जब आप ब्राउज़र में यूआरएल टाइप करते हैं तो क्या होता है
- 25. क्या होता है जब आप किसी ऑब्जेक्ट का उदाहरण बनाते हैं जिसमें C# में कोई स्थिति नहीं है?
- 26. क्या होता है जब आप C++ में दो बार या अधिक पॉइंटर को आवंटित करते हैं?
- 27. क्या होता है जब एक थ्रेड अपवाद फेंकता है?
- 28. आप कैसे कहते हैं कि आपके यूनिट परीक्षण सही हैं?
- 29. विधि कॉल में स्थिर चर
- 30. जब जावा प्रोग्राम शुरू होता है तो क्या होता है?
क्या [यह] (http://stackoverflow.com/questions/680546/static-function-concurrency-asp-net) आपके प्रश्न का उत्तर देता है? –
.ToString एक स्थिर विधि नहीं है। –
इमानुअल, मैंने आपके द्वारा उल्लिखित पोस्ट की जांच की। यह मेरी चिंता का समाधान करता है, लेकिन इसका उत्तर नहीं देता :( – developer747