2008-12-15 24 views
33

मुझे जावा पता है और आमतौर पर गेटर/सेटर विधियों में डाल दिया जाएगा। मुझे निम्नलिखित कोड के साथ सी # में ऐसा करने में दिलचस्पी है, लेकिन यह एक स्टैक ओवरफ्लो अपवाद फेंकता है। मैं क्या गलत कर रहा हूं?क्यों संपत्ति सेट StackOverflow अपवाद फेंक देता है?

कॉलिंग कोड

c.firstName = "a"; 

संपत्ति कोड

public String firstName; 
{ 
    get 
    { 
     return firstName; 
    } 
    set 
    { 
     firstName = value; 
    } 
} 

उत्तर

83

यह है क्योंकि आप रिकर्सिवली संपत्ति को कॉल कर रहे है - में set आप संपत्ति फिर से सेट कर रहे हैं, जो अनंत तक जारी है आप जब तक ढेर उड़ो।

आपको मूल्य रखने के लिए एक निजी बैकिंग फ़ील्ड की आवश्यकता है, उदा।

private string firstName; 

public string FirstName 
{ 
    get 
    { 
     return this.firstName; 
    } 
    set 
    { 
     this.firstName = value; 
    } 
} 

वैकल्पिक रूप से, अगर आप सी # 3.0 का उपयोग कर रहे हैं, तो आप एक स्वत: संपत्ति है, जो आप के लिए एक छिपा समर्थन क्षेत्र पैदा करता है, उदाहरण के लिए इस्तेमाल कर सकते हैं

public string FirstName { get; set; } 
+0

आपको अपने पहले उदाहरण में एक त्रुटि है। फर्स्टनाम के बाद अर्धविराम निकालें। Picky, मुझे पता है। कभी नहीं, मैं इसे ठीक कर दूंगा – Les

+0

फिक्स्ड ... केवल 4 साल देर हो चुकी है ;-) –

+9

बग को ठीक करने में कभी देर नहीं होती है :) –

12

आप अपनी संपत्ति के अंदर संपत्ति का नाम सेट कर रहे हैं - फ़ील्ड का नाम नहीं। यह बेहतर काम करेगा:

private m_firstName; 

public String firstName; 
{ 
    get 
    { 
     return m_firstName; 
    } 
    set 
    { 
     m_firstName = value; 
    } 
} 
+4

मैंने यह त्रुटि स्वयं कर दी है ... –

+0

जब आप किसी तृतीय पक्ष के लाइब्रेरी कोड में पाते हैं तो यह और भी मजेदार है ... –

संबंधित मुद्दे