मैं है निम्नलिखित कोड वर्ग:क्यों यह `सी # 6.0 ऑटो-प्रॉपर्टी प्रारंभ में उपलब्ध नहीं है?
Keyword 'this' is not available in the current context
मैं बस ऑटो-संपदा प्रारंभकर्ता का उपयोग नहीं करके इसे ठीक कर सकते हैं और स्पष्ट रूप से यह एक में ले जाते हैं:
public class Foo
{
public Nested Bar { get; } = new Nested(this);
public class Nested
{
public Nested(Foo foo)
{
foo.DoSomething();
}
}
private void DoSomething()
{
}
}
हालांकि, मैं इस संकलन त्रुटि मिलती है इसके बजाय निर्माता:
public Nested Bar { get; }
public Foo()
{
this.Bar = new Nested(this);
}
ऐसा क्यों है? क्या ऑटो-प्रॉपर्टी इनिशिलाइज़र वास्तव में आईएल में कन्स्ट्रक्टर कोड में अनुवादित नहीं है?
क्योंकि ऑटो-प्रॉपर्टी प्रारंभकर्ता को प्रारंभिक के साथ बैकिंग फ़ील्ड में अनुवादित किया जाता है। आप फ़ील्ड प्रारंभकर्ता में इसका संदर्भ नहीं दे सकते क्योंकि फ़ील्ड प्रारंभकर्ता कन्स्ट्रक्टर से पहले चलता है, इसलिए उपयोग करने के लिए अभी तक कोई निर्मित ऑब्जेक्ट नहीं है। – Evk
@Evk ऐसा नहीं है कि जब कन्स्ट्रक्टर चलता है तो ऑब्जेक्ट भी "अभी तक निर्मित नहीं है"? –
एक दिलचस्प सवाल रोलैंड पिहलाकस! इस ऑब्जेक्ट को एक्सेस करने के लिए तैयार स्मृति के संदर्भ में पहले से मौजूद होना चाहिए। अन्यथा संपत्ति वहां नहीं होगी। लेकिन कुछ और शुरू नहीं हुआ है। कोई भी कन्स्ट्रक्टर में इनिट चरणों का गलत आदेश भी कर सकता है लेकिन प्रोग्रामर के लिए और अधिक स्पष्ट होगा। – Droidum