क्या यह पता लगाना संभव है कि घटना में कोई श्रोताओं है या नहीं? (मुझे किसी भी व्यक्ति को इसकी आवश्यकता होने पर, मेरे ईवेंट प्रदाता ऑब्जेक्ट को निपटाने की आवश्यकता है)जांचें कि ईवेंट में कोई श्रोताओं है या नहीं?
उत्तर
मान लें वर्ग एक 3 पार्टी पुस्तकालय में है और यह कर सकते हैं:
संपादित
जब से तुम TheEvent वर्ग के बाहर से उपयोग नहीं कर सकते, तो आप एक विधि है कि जांच करता है को लागू कर सकता है 'टी संशोधित किया जा:
public class Data
{
public event EventHandler OnSave;
//other members
}
अपने कार्यक्रम में:
Data d = new Data();
d.OnSave += delegate { Console.WriteLine("event"); };
var handler = typeof(Data).GetField("OnSave", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(d) as Delegate;
if (handler == null)
{
//no subscribers
}
else
{
var subscribers = handler.GetInvocationList();
//now you have the subscribers
}
को सही किया है ऐसा लगता है कि GetInvocationList को वास्तव में जरूरी नहीं है, नल के लिए हैंडलर की जांच पर्याप्त है। क्या मैं सही हूँ? – user626528
@ user626528: हाँ आप सही हैं। इस उदाहरण में मैं कुछ ऐसा दिखा रहा हूं जो कुछ मामलों में उपयोगी हो। –
यदि कोई ऑनसेव ईवेंट नहीं जोड़े जाने पर हैंडलर शून्य हो जाएगा, तो ऊपर दिए गए कोड में शून्य जांच होनी चाहिए या फिर त्रुटि होगी। – Justin
आप जांच सकते हैं कि ईवेंट है या नहीं! = Null।
वैसे, में सी # आप इस के लिए हर बार की जाँच की जरूरत है आप एक घटना बढ़ा:
if (TheEvent != null) {
TheEvent(this, e);
}
और कारण वास्तव में है अगर घटना किसी भी श्रोता की जांच करने के लिए।
public class TheClass {
public bool HasEventListeners() {
return TheEvent != null;
}
}
मुझे इसे ऑब्जेक्ट के बाहर जांचना होगा, क्योंकि यह तीसरी पार्टी द्वारा बनाई गई है। मुझे यह जांचने की ज़रूरत है कि कोई ऑब्जेक्ट की घटना के लिए सदस्यता लेता है, और यदि कोई सब्सक्रिप्शन नहीं है तो इसका निपटान करें। – user626528
मुझे नहीं लगता कि आप कर सकते हैं, आपको एक विधि रैपर – Simone
संपादित उत्तर देखने की आवश्यकता है। – Simone
void Main()
{
Console.WriteLine(ContainsOnSomethingEvent()); // false
OnSomething += (o,e) => {};
Console.WriteLine(ContainsOnSomethingEvent()); // true
}
EventHandler mOnSomething;
event EventHandler OnSomething {
add { mOnSomething = (EventHandler)EventHandler.Combine(mOnSomething, value); }
remove { mOnSomething = (EventHandler)EventHandler.Remove(mOnSomething, value); }
}
public bool ContainsOnSomethingEvent() {
return mOnSomething != null && mOnSomething.GetInvocationList().Length > 0;
}
- 1. कैसे जांचें कि कोई ईवेंट हैंडलर jQuery या JS का उपयोग कर मौजूद है या नहीं?
- 2. जांचें कि रेल में कोई लेआउट मौजूद है या नहीं?
- 3. जांचें कि किसी फॉर्म में कोई कुंजी है या नहीं?
- 4. जांचें कि स्ट्रिंग सामग्री में कोई HTML है या नहीं?
- 5. जांचें कि कोई पंक्ति मौजूद है या नहीं postgresql
- 6. एएस 3: जांचें कि कोई शब्दकोश खाली है या नहीं
- 7. जांचें कि कोई कॉलम शून्य नहीं है
- 8. कैसे जांचें कि कोई std :: स्ट्रिंग सेट है या नहीं?
- 9. कैसे जांचें कि कोई ऑब्जेक्ट कल बराबर है या नहीं?
- 10. जांचें कि कोई पैरामीटर पाइथन मॉड्यूल है या नहीं?
- 11. यह कैसे जांचें कि कोई सूचक मान्य है या नहीं?
- 12. जांचें कि कोई चर mysqli ऑब्जेक्ट प्रकार है या नहीं?
- 13. जांचें कि कोई PHP सत्र खाली है या नहीं?
- 14. जांचें कि कोई शीट खुली है या नहीं
- 15. पायथन: जांचें कि कोई शब्द सही वर्तनी है या नहीं
- 16. jQuery जांचें कि कोई इनपुट प्रकार चेकबॉक्स है या नहीं?
- 17. कैसे जांचें कि कोई थ्रेड सो रहा है या नहीं?
- 18. कैसे जांचें कि कोई संपत्ति मौजूद है या नहीं?
- 19. जांचें कि फ़ाइल मौजूद है या नहीं,
- 20. जांचें कि सॉकेट कनेक्ट है या नहीं
- 21. जांचें कि कोई सूची है
- 22. जांचें कि स्ट्रिंग में कोई अन्य स्ट्रिंग नहीं है
- 23. जांचें कि कोई पथ पूर्ण या सापेक्ष
- 24. कैसे जांचें कि किनारे कुछ चक्र में है या नहीं?
- 25. जांचें कि कोई ऑब्जेक्ट
- 26. जांचें कि निर्देशिका में निर्देशिका मौजूद है या नहीं?
- 27. jquery कैसे जांचें कि यूआरएल में शब्द है या नहीं?
- 28. टेम्पलेट में कई से अधिक आइटम: जांचें कि कोई खाली नहीं है या कोई भी
- 29. जांचें कि NSDictionary में कुंजी मौजूद है या नहीं
- 30. कैसे जांचें कि कोई मान एक पूर्णांक या jasmine.js में एक स्ट्रिंग है या नहीं?
मेरा संपादन देखें ..... –