मैं मुख्य रूप से एक सी ++ डेवलपर हूं, लेकिन हाल ही में मैं सी # में एक परियोजना पर काम कर रहा हूं। ऑब्जेक्ट प्रारंभकर्ताओं का उपयोग करते समय आज मुझे कुछ व्यवहार का सामना करना पड़ा जो कम से कम मेरे लिए अप्रत्याशित था। मुझे आशा है कि यहां कोई व्यक्ति यह बता सकता है कि क्या हो रहा है।सी # में, फ़ील्ड प्रारंभकर्ता और ऑब्जेक्ट प्रारंभकर्ता कैसे इंटरैक्ट करते हैं?
उदाहरण A
public class Foo {
public bool Bar = false;
}
PassInFoo(new Foo { Bar = true });
उदाहरण B
public class Foo {
public bool Bar = true;
}
PassInFoo(new Foo { Bar = false });
उदाहरण एक काम करता है के रूप में मैं उम्मीद थी। PassInFoo में पारित ऑब्जेक्ट बार को सत्य पर सेट किया गया है। हालांकि, उदाहरण बी में, foo.Bar ऑब्जेक्ट प्रारंभकर्ता में झूठा असाइन किए जाने के बावजूद सत्य पर सेट है। उदाहरण बी में ऑब्जेक्ट प्रारंभकर्ता को क्या अनदेखा किया जा रहा है?
कुछ भी नहीं। आप जो देख रहे हैं उसे आप नहीं देख रहे हैं। – mquander
मैं इसे पुन: पेश नहीं कर सकता, नेट 3.5, आपके पास कौन सा संस्करण है और क्या आप वाकई यह व्यवहार कर रहे हैं जो आप देख रहे हैं? –
ऑब्जेक्ट प्रारंभकर्ता से पहले कन्स्ट्रक्टर चलाया जाएगा और फील्ड प्रारंभकर्ता कन्स्ट्रक्टर का हिस्सा हैं। सी # चश्मा देखें: 7.6 से।10 - किसी ऑब्जेक्ट निर्माण अभिव्यक्ति की प्रसंस्करण जिसमें ऑब्जेक्ट प्रारंभकर्ता या संग्रह प्रारंभकर्ता शामिल है, पहले प्रस्तुति कन्स्ट्रक्टर को प्रोसेस करना और उसके बाद ऑब्जेक्ट प्रारंभकर्ता (§7.6.10.2) या संग्रह प्रारंभकर्ता (§7.6) द्वारा निर्दिष्ट सदस्य या तत्व प्रारंभिक प्रक्रियाओं को संसाधित करना शामिल है। 10.3)। – VinayC