कोड आपके पास निम्न कोड के बराबर है:
- स्वत: गुण लागू करता है:
public struct DealImportRequest
{
private DealRequestBase _dr;
private int _irc;
public DealRequestBase DealReq
{
get { return _dr; }
set { _dr = value; }
}
public int ImportRetryCounter
{
get { return _irc; }
set { _irc = value; }
}
/* Note we aren't allowed to do this explicitly - this is didactic code only and isn't allowed for real*/
public DealImportRequest()
{
this._dr = default(DealRequestBase); // i.e. null or default depending on whether this is reference or value type.
this._irc = default(int); // i.e. 0
}
public DealImportRequest(DealRequestBase drb)
{
this.DealReq = drb;
this.ImportRetryCounter = 0;
}
}
अब, सभी मैं यहाँ किया है वाक्यात्मक चीनी को हटा है।
- काम करता है कि कौन से सदस्यों को
this
के सापेक्ष निपटाया जाता है।
- सभी
struct
एक डिफ़ॉल्ट नो-पैरामीटर कन्स्ट्रक्टर देता है।
पहले दो वैकल्पिक हैं (आप उन्हें स्पष्ट रूप से लिख सकता है अगर आप की कामना की) लेकिन तीसरे नहीं है - हम एक struct
के parameterless निर्माता के लिए हमारे अपने कोड लिखने की अनुमति नहीं है, हम साथ जाना है एक जो उपरोक्त कोड में से एक जैसा काम करता है, वह स्वचालित रूप से हमें दिया जा रहा है।
अब, यहाँ पर देखा, अचानक दो त्रुटियों का अर्थ स्पष्ट हो जाता है - अपने निर्माता परोक्ष this
उपयोग कर रहा है इससे पहले कि यह क्षेत्र (त्रुटि 188) आवंटित कर रहे हैं और उन क्षेत्रों स्वत: गुण (त्रुटि 843) का समर्थन कर होते हैं।
यह विभिन्न स्वचालित विशेषताओं का संयोजन है जो आम तौर पर हमें इसके बारे में सोचना नहीं पड़ता है, लेकिन इस मामले में अच्छी तरह से काम नहीं करते हैं। हम 843 के लिए त्रुटि संदेश में सलाह के बाद और आपकी स्पष्ट निर्माता के हिस्से के रूप डिफ़ॉल्ट निर्माता को फोन करके इसे ठीक कर सकते हैं:
public DealImportRequest(DealRequestBase drb)
:this()
{
DealReq = drb;
ImportRetryCounter = 0;
}
ऊपर अपने कोड के अपने विस्तारित संस्करण के संबंध में इस को देखते हुए, आप कैसे देख सकते हैं यह समस्या हल करता है, क्योंकि यह उस कन्स्ट्रक्टर को कॉल करता है जो बैकिंग फ़ील्ड को आगे बढ़ने से पहले निर्दिष्ट करता है।
स्रोत
2010-12-02 14:19:09
http://stackoverflow.com/questions/2534960/c-struct-constructor-fields-must-be-fully-assigned-before-control-is-returned – Hps
@Hps की संभावित डुप्लिकेट, मैं असहमत हूं। हालांकि यह उस प्रश्न के समान मुद्दे से संबंधित है, तथ्य यह है कि यह एक स्पष्ट क्षेत्र के बजाय एक अंतर्निहित क्षेत्र (स्वचालित संपत्ति का समर्थन करना) के सापेक्ष ऐसा कर सकता है, यह देखने के लिए पर्याप्त हो सकता है कि ये दो प्रश्न क्यों संबंधित हैं। यह उन पर विचार करने के लिए पर्याप्त होना चाहिए जो आईएमओ को डुप्लिकेट नहीं करते हैं। –
आप सही हैं। व्याख्या करने के लिए धन्यवाद। मुझे और सावधान रहना चाहिए :) – Hps