ऑब्जेक्ट्स बिलकुल पास नहीं हैं। डिफ़ॉल्ट रूप से, तर्क का मूल्यांकन किया जाता है और इसके मूल्य को मूल्य द्वारा पारित किया जाता है, क्योंकि आप जिस पद्धति से कॉल कर रहे हैं उसके पैरामीटर का प्रारंभिक मूल्य है। अब महत्वपूर्ण बिंदु यह है कि मूल्य संदर्भ प्रकारों के लिए एक संदर्भ है - एक वस्तु (या अशक्त) में जाने का एक तरीका। कॉलर से उस ऑब्जेक्ट में परिवर्तन दिखाई देगा। हालाँकि, किसी भिन्न ऑब्जेक्ट को संदर्भित करने के लिए पैरामीटर के मान को बदलना तब नहीं दिखाई देगा, जब आप मूल्य से पास का उपयोग कर रहे हों, जो सभी प्रकारों के लिए डिफ़ॉल्ट हो ।
यदि आप पास-बाय-संदर्भ का उपयोग करना चाहते हैं, तो आपको उपयोग करना होगाout
या ref
, पैरामीटर प्रकार एक मान प्रकार या संदर्भ प्रकार है। उस स्थिति में, प्रभावी रूप से चर को संदर्भ द्वारा पारित किया जाता है, इसलिए पैरामीटर तर्क के रूप में एक ही भंडारण स्थान का उपयोग करता है - और कॉल करने वाले द्वारा स्वयं पैरामीटर को बदल दिया जाता है।
इसलिए:
public void Foo(Image image)
{
// This change won't be seen by the caller: it's changing the value
// of the parameter.
image = Image.FromStream(...);
}
public void Foo(ref Image image)
{
// This change *will* be seen by the caller: it's changing the value
// of the parameter, but we're using pass by reference
image = Image.FromStream(...);
}
public void Foo(Image image)
{
// This change *will* be seen by the caller: it's changing the data
// within the object that the parameter value refers to.
image.RotateFlip(...);
}
मेरे पास एक लेख है जो इस बारे में अधिक विस्तार से बताता है । असल में, "पास से संदर्भ" का मतलब यह नहीं है कि आप क्या सोचते हैं इसका मतलब है।