सभी .NET पुस्तक में मैंने ईवेंट को कार्यान्वित करने के लिए गाइड लाइन पढ़ी है, यह बताती है कि आपको EventArgs
उप-वर्ग करने की आवश्यकता है और EventHandler का उपयोग करें। मैंने http://msdn.microsoft.com/en-us/library/ms229011.aspx पर अधिक जानकारी देखी, और यह कहता है "ईवेंट हैंडलर के रूप में उपयोग करने के लिए मैन्युअल रूप से नए प्रतिनिधि बनाने के बजाय System.EventHandler का उपयोग करें।" मैं समझता हूं कि EventArgs का उपयोग करने के महत्वपूर्ण कारण हैं, लेकिन मेरा सवाल यह नहीं है कि "क्या मुझे ऐसा करना चाहिए?", लेकिन "क्या मैं इसे इस तरह से कर सकता हूं?"।क्या EventArgs क्लास और ईवेंट कीवर्ड के बीच कोई विशेष संबंध है?
क्या कोई कारण है कि मैं अपने कार्यक्रमों के साथ EventHandler
के बजाय एक सामान्य प्रतिनिधि का उपयोग नहीं कर सकता? उदाहरण के लिए, अगर मैं दृढ़ता से टाइप किए गए प्रेषक को चाहता हूं (कोई और object sender
से नाराज हो?)।
यह समझाने के लिए कि मेरा क्या मतलब बेहतर है, क्या कोई कारण नहीं है कि निम्नलिखित काम नहीं करेंगे?
public class IoC
{
public AbstractFactory GetAbstractFactory()
{
var factory = new AbstractFactory();
factory.CreateObject +=()=>new object();
return factory;
}
}
public class AbstractFactory
{
public event Func<object> CreateObject;
private object OnObjectCreated()
{
if(CreateObject == null)
{
throw new Exception("Not injected.");
}
return CreateObject();
}
private object _injectedObject;
public object InjectedObject
{
get
{
if(_injectedObject == null)
{
_injectedObject = OnObjectCreated();
}
return _injectedObject;
}
}
}
मैंने एक अवलोकन संग्रह के समान कुछ लागू करने के लिए बिल्कुल किया है। – asawyer
संबंधित धागा: http://stackoverflow.com/questions/4828212/should-eventhandler-always-be-used-for-events/4828233 – CodesInChaos