2013-02-11 13 views
5

मैंने किसी चीज़ का मॉडल इस तरह एक संपत्ति है कि है। मैंने कोशिश की लेकिन यह काम नहीं कर रहा है:सेटिंग केवल एक सेटर संपत्ति

public string SomeString { get; set { DoSomeWork(); } } 

सही वाक्यविन्यास क्या है?

+0

"यह काम नहीं कर रहा है" का क्या अर्थ है? – Yahia

उत्तर

12

बजाय एक निजी क्षेत्र का उपयोग करें, इस तरह ...

public class SomeModel 
{ 
    private string someString = ""; 

    public string SomeString { 
     get { return this.someString; } 
     set { 
      this.someString = value; 
      this.DoSomeWork(); 
     } 
    } 

    public void DoSomeWork() 
    { 
     .... 
    } 
} 
3

आप स्वत: गुणों के साथ ऐसा नहीं कर सकते - यदि आप एक "मैन्युअल" संपत्ति एक क्षेत्र द्वारा समर्थित बनाने के लिए होगा।

private string _someString; 

public string SomeString 
{ 
    get { return _someString; } 
    set 
    { 
     _someString = value; 
     DoSomeWork(); 
    } 
} 

यदि आप वास्तव में इस बॉयलरप्लेट (कहते हैं कि तुम समय की इस सैकड़ों कर दिया था), PostSharp की तरह एक AOP ढांचे का उपयोग कर अपनी ओर से इस लागू करने के लिए पर विचार के साथ सौदा नहीं कर सकते हैं - आप चाहते वांछित योजना को लागू करने के लिए बाइनरी रीराइटर प्राप्त करने के लिए केवल एक स्वचालित संपत्ति और एक विशेषता घोषित करने की आवश्यकता है।

2

यह काम करेंगे ...

private string _someString; 
public string SomeString { get { return _someString; } set { _someString = value; DoSomeWork(); } } 
1
private string _someString; 

public string SomeString 
{ 
    get 
    { 
     return _someString; 
    } 
    set 
    { 
     DoSomeWork(); 
     _someString = value; 
    } 
} 
0

सी # टीम 3.0 सी # में ऑटो-लागू गुण शुरू की है। मॉडल बनाने को कम करने के तर्क के साथ जो संकलक द्वारा बनाए गए अज्ञात क्षेत्र द्वारा समर्थित है। इसका उपयोग तब किया जाता है जब आपको ऑब्जेक्ट क्लास की किसी संपत्ति पर कोई अतिरिक्त तर्क लागू करने की आवश्यकता नहीं होती है। तो यह बस के रूप में पालन किया।

public string Name{ get; set;}// auto-implemented property. no additional logic. 

अगर हम कुछ तर्क जोड़ना चाहते हैं क्योंकि आप एक फ़ंक्शन जोड़ना चाहते हैं। हमें नीचे की तरह एक निजी क्षेत्र द्वारा समर्थित एक मैनुअल संपत्ति लिखनी होगी।

private string _Name; 
public string Name 
{ 
    get {return _Name;} 
set { 
     _Name=value; 
     DoSomething(); //Additional logic implemented. 
    } 
} 
संबंधित मुद्दे