मैं एक सामान्य इवेंट बनाने के प्रयास कर रहा हूँ। मूल रूप से यह इस तरह दिखना चाहिए:EventHandlers और सहप्रसरण
namespace DelegateTest
{
class Program
{
static void Main(string[] args)
{
var lol = new SomeClass();
lol.SomeEvent += handler;
}
static void handler(object sender, SomeDerivedClass e)
{
}
}
class SomeClass
{
public delegate void SomeEventDelegate<in T>(object sender, T data);
public event SomeEventDelegate<ISomeInterface> SomeEvent;
}
interface ISomeInterface
{
}
class SomeDerivedClass : ISomeInterface
{
}
}
मैं किसी भी प्रतिनिधि है जो दूसरा पैरामीटर से ली गई है पारित करने के लिए उपयोगकर्ता की अनुमति देना चाहते "ISomeInterface।"
"में" सही को निर्दिष्ट विपरीत विचरण,? इसका अर्थ यह है कि यदि एपीआई कुछ और सामान्य की उम्मीद कर रहा है, तो आप इसे और अधिक विशिष्ट (मेरे आधार "आईसोमइंटरफेस" में सामान्य हो सकते हैं, और मेरा "कुछ डीरियड क्लास" विशिष्ट होगा।) हालांकि, मुझे अपने कंपाइलर को बताया जा रहा है कि "विधि हैंडलर के लिए कोई अधिभार DelegateTest.SomeClass.SomeEventDelegate मेल खाता है।"
मुझे आश्चर्य है कि यह क्यों काम नहीं कर रहा है। अगर समस्याएं होती हैं तो क्या समस्याएं होती हैं? या क्या मैं इसके लिए काम करने के लिए कुछ याद कर रहा हूँ?
अग्रिम धन्यवाद!
देखें http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no –
मुझे लगता है कि आपके पास एकाधिक प्रकारों को संभालने के लिए एक भी ईवेंट नहीं हो सकता है, आप केवल प्रतिनिधि ही हो सकते हैं। आप अपने हैंडलर को 'ISomeInterface' को स्वीकार करने के लिए बदलने के लिए क्या कर सकते हैं, और उसके बाद भेजे गए ऑब्जेक्ट के प्रकार की जांच करें। या इंटरफ़ेस का उपयोग करें। http://msdn.microsoft.com/en-us/library/dd469484.aspx – BrunoLM