चर

8

का एक परिवर्तन के लिए देखने के लिए एक ईवेंट बनाएं सिर्फ कहते हैं कि मैं है कि दें:चर

public Boolean booleanValue; 

public bool someMethod(string value) 
{ 
    // Do some work in here. 
    return booleanValue = true; 
} 

मैं एक ईवेंट हैंडलर कि आग जब booleanValue बदल गया है कैसे बना सकते हैं? क्या यह संभव है?

+0

क्या यह Winform, ASP.Net या Silverlight/WPF है? –

+0

यह विंडोज 8 मेट्रो स्टाइल ऐप में है। लेकिन मैं खुशी से सी # में कुछ और के लिए जवाब स्वीकार करूंगा (सिल्वरलाइट के अलावा) – Arrow

उत्तर

12

सामान्य रूप से नियमों के रूप में सार्वजनिक क्षेत्रों का उपयोग करने से बचें। जितना संभव हो उतना निजी रखने की कोशिश करें। फिर, आप अपने कार्यक्रम को फायर करने वाली रैपर संपत्ति का उपयोग कर सकते हैं। उदाहरण देखें:

class Foo 
{ 
    Boolean _booleanValue; 

    public bool BooleanValue 
    { 
     get { return _booleanValue; } 
     set 
     { 
      _booleanValue = value; 
      if (ValueChanged != null) ValueChanged(value); 
     } 
    } 

    public event ValueChangedEventHandler ValueChanged; 
} 

delegate void ValueChangedEventHandler(bool value); 

यह आपको प्राप्त करने के लिए एक सरल, "मूल" तरीका है। अन्य तरीके भी हैं, यहां तक ​​कि .NET Framework द्वारा ऑफ़र किया गया है, लेकिन उपर्युक्त दृष्टिकोण सिर्फ एक उदाहरण है।

3
  1. बूलेनवेल्यू को निजी में एक्सेस करें और केवल स्थिरता के लिए इसे एक विधि के माध्यम से बदलने की अनुमति दें।

  2. आग अपने उस विधि

में कस्टम घटना।

private bool _boolValue; 

public void ChangeValue(bool value) 
{ 
    _boolValue = value; 
    // Fire your event here 
} 

विकल्प 2: यह एक संपत्ति बनाने और सेटर

public bool BoolValue { get { ... } set { _boolValue = value; //Fire Event } } 

संपादित में ईवेंट सक्रिय: जैसा कि अन्य लोगों ने कहा INotifyPropertyChanged यह करने के लिए नेट मानक तरीका है।

7

INotifyPropertyChanged पहले से ही है, तो संपत्ति बदल गया है सूचित करने के लिए परिभाषित किया गया है आप के पार भविष्य में फिर से उपयोग कर रहा है आने के लिए बाध्य कर रहे हैं।

संपत्ति में अपना चर लपेटें और INotifyPropertyChanged इंटरफ़ेस का उपयोग करें।

2
CallingClass.BoolChangeEvent += new Action<bool>(AddressOfFunction); 

bool संपत्ति प्रक्रिया के साथ अपनी कक्षा में:

public event Action<bool> BoolChangeEvent; 
public Boolean booleanValue; 
public bool someMethod(string value) 
{ 
    // Raise event to signify the bool value has been set. 
    BoolChangeEvent(value); 

    // Do some work in here. 
    booleanValue = true; 
    return booleanValue; 
} 
2

नहीं यह एक चर के मूल्य में परिवर्तन के लिए के बारे में सूचना पाने के लिए * संभव नहीं है।

आप मूल्य के अनुसार कुछ वर्ग और आग घटनाओं की संपत्ति बनने के लिए मूल्य बनाकर आप जो चाहते हैं उसे प्राप्त कर सकते हैं।

*) यदि आपका कोड किसी प्रक्रिया के लिए डीबगर है तो आप सीपीयू को परिवर्तनों के बारे में सूचित करने के लिए कर सकते हैं - विजुअल स्टूडियो में डेटा चेज़ ब्रेकपॉइंट देखें। जीसी द्वारा स्मृति में वस्तुओं को बदलने के लिए इसे कम से कम कुछ मूल कोड और मैंगड कोड के लिए सही ढंग से कार्यान्वित करने की आवश्यकता होगी।