pass by reference - Passing object from Main() to function changes the object , even though C# is by value? -


निम्न कोड पर विचार करें:

  सिस्टम का उपयोग कर; System.Collections.Generic का उपयोग कर; System.Linq का उपयोग कर; System.Text का उपयोग कर; सिस्टम का उपयोग। थ्रेडिंग। टास्क; नेमस्पेस टेस्ट {क्लास व्यक्ति {सार्वजनिक व्यक्ति (स्ट्रिंग नेम) {this.first = name; } निजी स्ट्रिंग पहले; सार्वजनिक शून्य सेटनाम (स्ट्रिंग नाम) {this.first = name; } सार्वजनिक स्ट्रिंग getName () {return this.first; }} वर्ग कार्यक्रम {सार्वजनिक स्थिर शून्य परिवर्तननाम (व्यक्ति प्रति) {per.setName ("जैक"); } सार्वजनिक स्थिर शून्य परिवर्तन टोन (प्रति व्यक्ति) {प्रति = शून्य; } स्थिर शून्य मुख्य (स्ट्रिंग [] args) {व्यक्ति पी = नया व्यक्ति ("डेविड"); Console.WriteLine (p.getName ()); changeName (पी); Console.WriteLine (p.getName ()); changeToNull (पी); Console.WriteLine (p.getName ()); }}}   

आउटपुट है:

  डेविड जैक जैक   

मेरी समझ से सी # मूल्य से है, इसलिए जब p को changeName () से गुजरते हैं, तो यह भी p को मेन () में बदलता है, लेकिन जब मैं इसे पर सेट करता हूं, शून्य , यह जैक

व्यक्ति एक है संदर्भ प्रकार, इसलिए जब आप इसे बदलने के लिए पास करते हैंनाम के रूप में मूल्य जो आप वास्तव में गुजर रहे हैं स्मृति में उस व्यक्ति वस्तु के लिए एक सूचक (पता) है चूंकि उस पॉइंटर को मूल्य से पारित किया जाता है, इसलिए आप इसे किसी अलग व्यक्ति की प्रतिलिपि में पुन: असाइन नहीं कर सकते हैं, लेकिन आप उस ऑब्जेक्ट पर तरीकों को कॉल कर सकते हैं जो अपनी आंतरिक स्थिति को बदल सकते हैं। विधि परिवर्तन टयोनल जिस तरह से कार्य करता है, वह बर्ताव करता है क्योंकि प्रत्येक व्यक्ति के सूचक को मूल्य से फिर से पारित किया जाता है। जब आप रिक्त करने के लिए प्रति सेट करते हैं, तो आप केवल संकेतक स्थानीय को changeToNull विधि में बदल रहे हैं।

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

Installing croogo for cakephp -