2011-02-27 22 views
6

पर केवल एक सेटटर निर्दिष्ट करना मैं कक्षा का उदाहरण बनाने के लिए गेटर्स और सेटर्स का उपयोग कर रहा हूं।सेट/गेटर

क्या निजी वैरिएबल के बिना सेट किए गए मान को समायोजित करना संभव है, और इसे सीधे प्रकार पर करें?

उदाहरण के लिए, यदि मेरी कक्षा है:

public class Cat() 
{ 
public String Age{get; set; } 
} 

और इसे करने में मुझे का दृष्टांत हैं:

new Cat({Age: "3"}); 

अब, अगर मैं एक समारोह में कहा जाता ConvertToHumanYears कि मैं इसे पहले कॉल करना चाहते है संग्रहीत किया जा रहा है, मुझे लगता है कि ऐसा कुछ सही तरीका है:

public class Cat() 
{ 
public String Age{get; set{ value = ConvertToHumanYears(value); } 
} 

लेकिन ऊपर (एक डी इसके कई डिवीवेटिव) त्रुटियों को वापस करने लगते हैं। क्या मैं कुछ अतिरिक्त निजी चर के बिना कुछ ऐसा करना संभव बनाता हूं जो मुझे सेट और मिलता है?

+0

यह लग रहा है वीबी की तरह एक बहुत कुछ है, क्यों के रूप में सी # टैग:

फिर आप एक निर्माता मान सेट की अनुमति देता है कि बना सकते हैं? – ctacke

उत्तर

17

आप गेटटर के लिए ऑटो प्रॉपर्टी का उपयोग नहीं कर सकते हैं और सेटटर की परिभाषा है।

यह या तो

public class Cat() 
{ 
    public String Age{get; set; } 
} 

या

public class Cat() 
{ 
    private String _age; 

    public String Age{ 
     get{ 
      return _age; 
     } 
     set{ 
      _age = ConvertToHumanYears(value); 
     } 
    } 
    } 

} 
+0

आह, मेरे पास यही है, लेकिन मैं इसे एक निजी चर के अतिरिक्त बिना साफ करने की उम्मीद कर रहा था :( – Steve

+1

इसका कारण यह है कि संकलक वास्तव में रनटाइम पर फ्लाई पर निजी चर बनाता है, इसलिए आप इसे मिश्रण नहीं कर सकते। @StackOverFlowException सही है। –

2

कैसे इस बारे में?

public class Cat 
{ 
    public string Age { get; private set; } 
} 

आप सेटर के लिए है, लेकिन यह केवल वर्ग के अंदर ही प्रतिदेय है।

public Cat(string age) 
{ 
    Age = age; 
} 

या

public Cat(string age) 
{ 
    Age = ConvetToHumanYears(age); 
}