मुझे यकीन है कि मैं सिर्फ घटनाओं और/या सी # में प्रतिनिधियों के बारे में कुछ बुनियादी समझ नहीं कर रहा हूँ, लेकिन क्यों मैं इस कोड नमूने में बूलियन परीक्षण नहीं कर सकता:सी # में, मैं परीक्षण क्यों नहीं कर सकता अगर कोई ईवेंट हैंडलर कक्षा के बाहर कहीं भी शून्य हो गया है जिसे परिभाषित किया गया है?
public class UseSomeEventBase {
public delegate void SomeEventHandler(object sender, EventArgs e);
public event SomeEventHandler SomeEvent;
protected void OnSomeEvent(EventArgs e) {
// CANONICAL WAY TO TEST EVENT. OF COURSE, THIS WORKS.
if (SomeEvent != null) SomeEvent(this, e);
}
}
public class UseSomeEvent : UseSomeEventBase {
public bool IsSomeEventHandlerNull() {
// "LEFT HAND SIDE" COMPILER ERROR
return SomeEvent == null;
}
}
class Program {
static void Main(string[] args) {
var useSomeEvent = new UseSomeEvent();
useSomeEvent.SomeEvent +=new UseSomeEventBase.SomeEventHandler(FuncToHandle);
// "LEFT HAND SIDE" COMPILER ERROR
if (useSomeEvent.SomeEvent == null) {
}
var useSomeEventBase = new UseSomeEventBase();
useSomeEventBase.SomeEvent += new UseSomeEventBase.SomeEventHandler(FuncToHandle);
// "LEFT HAND SIDE" COMPILER ERROR
if (useSomeEventBase.SomeEvent == null) {
}
}
static void FuncToHandle(object sender, EventArgs e) { }
}
+1। बस इसमें जोड़ने के लिए, आप निश्चित रूप से, बहु-कलाकार प्रतिनिधि के साथ स्पष्ट तरीकों के रूप में ऐड/निकालें ऑपरेशंस को कार्यान्वित कर सकते हैं। इस मामले में, आप ग्राहकों और गैर-ग्राहकों को स्वयं ट्रैक कर सकते हैं - और इस प्रकार यदि आप चुनते हैं तो अतिरिक्त जानकारी तक पहुंच प्रदान करें (जैसे ग्राहकों की गिनती आदि)। – LBushkin
यूप - वह जोड़ देगा, धन्यवाद। –
यह ध्यान देने योग्य हो सकता है कि * कारण * घटनाएं इस तरह कार्यान्वित की गई हैं ताकि किसी वर्ग को घटना के साथ कक्षा के व्यवहार को आसानी से नहीं बदला जा सके (जैसे एक प्रतिनिधि संपत्ति की तरह) और इसे मिटा देना ग्राहकों की सूची। – womp