.NET Heaps and Stacks यह ढेर और ढेर के काम का एक संपूर्ण उपचार है।
सी # और कई अन्य ढेर का उपयोग सामान्य संदर्भ बात उपयोग में OOP भाषाओं इस संदर्भ में संदर्भ के लिए प्वाइंटर नहीं संभालती है (सी # भी प्वाइंटर उपयोग करने में सक्षम है!) सूचक उपमा कुछ सामान्य अवधारणाओं के लिए इस वैचारिक काम करते हैं, लेकिन मॉडल इस तरह के सवालों के लिए टूट जाता है। इस विषय पर एरिक लिपर्ट की उत्कृष्ट पोस्ट देखें Handles are Not Addresses
यह कहना उचित नहीं है कि हैंडल एक सूचक का आकार है। (हालांकि यह संयोग से समान हो सकता है) हैंडल ऑब्जेक्ट्स के लिए उपनाम हैं, यह आवश्यक नहीं है कि वे किसी ऑब्जेक्ट के लिए औपचारिक पता हों।
इस मामले CLR हैंडल के लिए वास्तविक पते का उपयोग करने के लिए होता है: ऊपर के लिंक से:
... CLR वास्तव में कचरा कलेक्टर के स्वामित्व वाले वस्तुओं के लिए पते के रूप में प्रबंधित वस्तु के संदर्भ को लागू करता है , लेकिन यह कार्यान्वयन विस्तार है।
तो हाँ एक हैंडल शायद एक 32 बिट वास्तुकला पर 4 बाइट, और एक 64 बाइट वास्तुकला पर 8 बाइट्स है, लेकिन यह एक "यकीन है कि के लिए" नहीं है, और यह संकेत की वजह से सीधे नहीं है। कंपाइलर कार्यान्वयन और के आधार पर ध्यान देने योग्य है, पता प्रकारों का उपयोग कुछ प्रकार के पॉइंटर्स आकार में भिन्न हो सकते हैं।
इस संदर्भ के साथ आप शायद इसे सूचक सूचक द्वारा मॉडल कर सकते हैं, लेकिन यह जानना महत्वपूर्ण है कि हैंडल को पते होने की आवश्यकता नहीं है। सीएलआर इसे बदलना चुन सकता है अगर वह भविष्य में चाहता था और सीएलआर के उपभोक्ताओं को बेहतर नहीं पता होना चाहिए।
इस सूक्ष्म बिंदु के एक अंतिम ड्राइव:
यह एक सी # सूचक है:
object myVariable;
वे ही नहीं हैं:
int* myVariable;
यह एक सी # हैंडल है।
आप पॉइंटर्स पर गणित जैसी चीजें कर सकते हैं, आपको हैंडल के साथ नहीं करना चाहिए। यदि आपका हैंडल एक सूचक की तरह लागू किया जाता है और आप इसका उपयोग करते हैं जैसे कि यह एक सूचक था, तो आप हैंडल का दुरुपयोग कर रहे हैं जो कुछ तरीकों से आपको परेशानी में डाल सकता है।
स्रोत
2012-02-29 02:21:21
ध्यान दें कि ये प्रश्न सभी कार्यान्वयन विवरण (जो परिवर्तन के अधीन हैं) हैं और वास्तव में सी # के बारे में नहीं बल्कि एनईटी सीएलआर के बारे में हैं। – dlev
चोपपरडेव, अच्छा दिलचस्प सवाल है लेकिन मैं पूछना चाहता हूं कि आप क्या पूछ रहे हैं - एक ऑब्जेक्ट संदर्भ काफी हद तक एक सूचक है और यह आपके कोड पर चल रहे सिस्टम के आर्किटेक्चर के आधार पर केवल 'संख्या' है। यदि आप इस बारे में पूछ रहे हैं कि नेट हेप आवंटन कैसे काम करता है, तो यह पूरी तरह से एक अलग जानवर है। –
बस जोड़ना चाहता था, यहां कोई अपमान नहीं है, मैं यह कहने की कोशिश नहीं कर रहा हूं कि आप नहीं जानते कि आपका क्या मतलब है - बात यह है कि नेट में यह एक संदिग्ध प्रश्न है और यह भविष्य में उपयोगकर्ताओं को ढेर पर मदद करेगा ओवरफ्लो यह जानने के लिए कि हम किस संदर्भ के बारे में बात कर रहे हैं। –