कक्षाओं में मूल्य प्रकार गुणों के संबंध में ढेर और ढेर पर क्या होता है, इस बारे में भ्रमित हो रहा हूं।किसी संपत्ति से मूल्य प्रकार लौटाना
मेरे समझ अब तक:
जब आप इस तरह की एक संरचना (मान प्रकार) के साथ एक वर्ग बनाने के लिए:
Foo fooObj = new Foo();
: तुम इतनी तरह एक वर्ग उदाहरण बनाते हैं
class Foo
{
private Bar _BarStruct;
public Bar BarStruct
{
get {return _BarStruct; }
set {_BarStruct = value; }
}
}
private struct Bar
{
public int Number;
Bar()
{
Number = 1;
}
Bar(int i)
{
Number = i;
}
}
ढेर और ढेर इस तरह दिखेगा:
... जहां ढांचे में फू क्लास में बार संरचना को एम्बेड किया गया है। यह मुझे समझ में आता है, लेकिन जब हम फू ऑब्जेक्ट के भीतर, बारस्ट्रक्चर क्लास में नंबर पूर्णांक को संशोधित करने पर विचार करते हैं, तो मैं इसे खोना शुरू करता हूं। उदाहरण के लिए:
Foo fooObj = new Foo();
fooObj.BarStruct.Number = 1;
के रूप में मैं समझता हूँ, इस ढेर, जिसका अर्थ है कि BarStruct के एक सदस्य की कोई भी परिवर्तन करने के लिए वस्तु के माध्यम से किया नहीं होगा, यही कारण है पर रहने के BarStruct की एक प्रति लौट जाना चाहिए उपरोक्त अंतिम पंक्ति एक त्रुटि देता है।
क्या यह अभी तक सही है?
यदि हां, तो मेरे सवाल है, कैसे एक काम इस जैसे आते हैं:
fooObj.BarStruct = new Bar(2);
... वैध है और ढेर मूल्य बदलता है? निश्चित रूप से यह सिर्फ ढेर पर मूल्य बदल रहा है ?? इसके अलावा, (द्वारा और द्वारा) मुझे यह इतना भ्रमित लगता है कि आप मूल्य प्रकार पर नए उपयोग करने में सक्षम हैं। मेरे लिए, ढेर पर आवंटन के लिए नया है (सी ++ के अनुसार) और ढेर पर वस्तुओं के लिए ऐसा करने के लिए अप्राकृतिक लगता है।
तो बस प्रश्न को दोबारा शुरू करने के लिए, क्या मैं अपनी धारणा में सही हूं कि एक संरचना वाली संपत्ति कहलाती है और आप एक प्रतिलिपि में एक नई संरचना क्यों निर्दिष्ट कर सकते हैं और फिर भी यह अभी भी संदर्भ को बदलता है ढेर?
वास्तव में उम्मीद है कि यह सब समझ में आता है।
येल अगर आपको स्पष्टीकरण की आवश्यकता है!
ता,
एंडी।
@ एंडी, +1 अच्छा सवाल है। अगर आप 10 अनुभवी सी # प्रोग्रामर से पूछें तो मैं शर्त लगाऊंगा, आधा से भी कम पता चल जाएगा कि वास्तव में क्या हो रहा है। संरचनाएं मुश्किल हैं क्योंकि वे कक्षाओं की तरह दिखती हैं लेकिन उनके पास महत्वपूर्ण अंतर हैं। – Ash