निम्नलिखित कोड में, मैं इसे प्राप्त करने/उप-वर्गीकरण करके कक्षा के व्यवहार को विस्तारित करना चाहता हूं, और बेस क्लास की एक घटना का उपयोग करना चाहता हूं:क्यों सी # में बेस क्लास में व्युत्पन्न कक्षाओं में घटनाओं का उपयोग नहीं किया जा सकता है?
public class A
{
public event EventHandler SomeEvent;
public void someMethod()
{
if(SomeEvent != null) SomeEvent(this, someArgs);
}
}
public class B : A
{
public void someOtherMethod()
{
if(SomeEvent != null) SomeEvent(this, someArgs); // << why is this not possible?
//Error: The event 'SomeEvent' can only appear on the left hand side of += or -=
//(except when used from within the type 'A')
}
}
यह क्यों संभव नहीं है?
और इस तरह की स्थिति के लिए सामान्य समाधान क्या है?
उपसर्ग का प्रयोग न करें 'उठाएँ ...', यह हमेशा होना चाहिए 'पर ...'। इसके अलावा बेस क्लास की विधि वर्चुअल होना चाहिए। – Keith
मल्टीथ्रेडिंग के संकेत के लिए भी धन्यवाद। –
मुझे नहीं लगता कि यह एक अच्छा जवाब है क्योंकि यह उस स्थिति को संबोधित नहीं करता है जहां बाहरी कार्य जो आप दोनों अन्य मॉड्यूल और कुछ मोड में दोनों को प्रस्तुत कर रहे हैं, वही पैरामीटर प्राप्त करने के लिए जो कुछ विधि या कुछ अन्य विधि हो सकते हैं। एएसपी के ऑब्जेक्टडेटा स्रोत के मामले में, यदि आप ऑनसेलेक्लिंग विकल्प निर्दिष्ट करते हैं, तो यह कुछ ऑब्जेक्ट्स, ऑब्जेक्ट प्रेषक, और ऑब्जेक्टडेटा स्रोतों का चयन करने से गुजरता है। अब, इस मामले में कि आपने पहले ओडीएसईएए को एक पैरामीटर के साथ पॉप्युलेट किया था जिसे आप अन्य कार्यों में गुजर रहे हैं, यह उदाहरण बेकार है। एक कामकाज के बारे में सोच नहीं सकते ... –