यहाँ के बारे में सोचना एक अच्छा तरीका है मूल्य-प्रकार, गुजरने वाले मूल्य, संदर्भ-प्रकार, और पास-बाय-रेफरेंस के बीच अंतर:
एक चर एक कंटेनर है।
एक मूल्य-प्रकार चर में एक उदाहरण होता है। एक संदर्भ-प्रकार चर में कहीं और संग्रहीत एक उदाहरण के लिए एक सूचक शामिल है।
एक मान-प्रकार चर परिवर्तक को संशोधित करने वाले उदाहरण को बदल देता है। संदर्भ-प्रकार चर को संशोधित करने से उस उदाहरण को बदल दिया जाता है जो यह इंगित करता है।
पृथक संदर्भ-प्रकार चर एक ही उदाहरण को इंगित कर सकते हैं। इसलिए, वही उदाहरण किसी भी चर के माध्यम से उत्परिवर्तित किया जा सकता है जो इसे इंगित करता है।
एक पास-दर-मूल्य तर्क सामग्री की एक नई प्रति के साथ एक नया कंटेनर है। एक पारित संदर्भ तर्क मूल सामग्री के साथ मूल कंटेनर है।
जब कोई मान-प्रकार तर्क पास-दर-मान होता है: तर्क की सामग्री को पुन: असाइन करने से दायरे के बाहर कोई प्रभाव नहीं पड़ता है, क्योंकि कंटेनर अद्वितीय है। तर्क को संशोधित करने से दायरे के बाहर कोई प्रभाव नहीं पड़ता है, क्योंकि उदाहरण एक स्वतंत्र प्रति है।
जब कोई संदर्भ-प्रकार तर्क पास-दर-मान होता है: तर्क की सामग्री को पुन: असाइन करने से दायरे के बाहर कोई प्रभाव नहीं पड़ता है, क्योंकि कंटेनर अद्वितीय है। तर्क की सामग्री को संशोधित करना बाहरी दायरे को प्रभावित करता है, क्योंकि प्रतिलिपि सूचक एक साझा उदाहरण को इंगित करता है।
जब कोई तर्क पास-दर-संदर्भ है: तर्क की सामग्री को पुन: असाइन करना बाहरी दायरे को प्रभावित करता है, क्योंकि कंटेनर साझा किया जाता है। तर्क की सामग्री को संशोधित करना बाहरी दायरे को प्रभावित करता है, क्योंकि सामग्री साझा की जाती है।
अंत में:
एक स्ट्रिंग चर एक संदर्भ प्रकार चर रहा है। इसलिए, इसमें कहीं और संग्रहीत एक उदाहरण के लिए एक सूचक शामिल है। जब पास-दर-मूल्य, उसके सूचक की प्रतिलिपि बनाई जाती है, इसलिए एक स्ट्रिंग तर्क को संशोधित करना साझा उदाहरण को प्रभावित करना चाहिए। हालांकि, एक स्ट्रिंग इंस्टेंस में कोई म्यूटेबल गुण नहीं है, इसलिए स्ट्रिंग तर्क को वैसे भी संशोधित नहीं किया जा सकता है। जब पास-बाय-रेफरेंस, पॉइंटर का कंटेनर साझा किया जाता है, तो पुन: असाइनमेंट अभी भी बाहरी दायरे को प्रभावित करेगा।
नीचे दिए गए लेख द्वारा दिए गए लेख को देखें। आपके द्वारा उल्लिखित व्यवहार को सी ++ पॉइंटर्स द्वारा भी पुन: उत्पन्न किया जा सकता है। – Sesh
[एमएसडीएन] में बहुत अच्छी व्याख्या (http://msdn.microsoft.com/en-us/library/s6938f28.aspx) भी। –
संभावित सी डुप्लिकेट [सी # में, स्ट्रिंग एक संदर्भ प्रकार क्यों है जो मान प्रकार की तरह व्यवहार करता है?] (Http://stackoverflow.com/questions/636932/in-c-why-is-string-a-reference-type -that-behaves-like-a-value-type) – Liam