मैं कुछ समझने में कोई परेशानी हो रहा है यही कारण है कि निम्नलिखित स्निपेट मुझे एक त्रुटिजेनेरिक बाधा अपेक्षा के अनुरूप काम नहीं करता है
public void SomeMethod<T>(T arg) where T : MyInterface
{
MyInterface e = arg;
}
लेकिन यह एक है, जो मैं सामान्य की वजह से काम करने के लिए उम्मीद करेंगे नहीं देता प्रकार बाधा
private readonly IList<Action<MyInterface>> myActionList = new List<Action<MyInterface>>();
public IDisposable Subscribe<T>(Action<T> callback) where T: MyInterface
{
myActionList.Add(callback); // doesn't compile
return null
}
इस त्रुटि
cannot convert from 'System.Action<T>' to 'System.Action<MyInterface>'
मैं VS2012 SP1 और .NET 4.5 का उपयोग कर रहा देता है।
क्या कोई यह समझा सकता है कि बाधा इसे संकलित करने की अनुमति क्यों नहीं देती है?
public void SomeMethod(MyInterface arg)
{
MyInterface e = arg;
}
private readonly IList<Action<MyInterface>> myActionList = new IList<Action<MyInterface>>();
public IDisposable Subscribe(Action<MyInterface> callback)
{
myActionList.Add(callback); // does compile
return null
}
काम करते हैं और संकलन और व्यावहारिक रूप से क्या आप अभी उपयोग कर के रूप में ही है होगा:
आपकी सूची क्यों पढ़ी जाती है, और क्यों 'नया IList'? क्या यह वास्तविक घोषणा है? –
कक्षाएं और प्रतिनिधि एक ही बात नहीं हैं। 'System.Action' 'MyInterface' प्रकार के एक पैरामीटर के साथ एक फ़ंक्शन का प्रतिनिधित्व करता है, जबकि 'System.Action ' प्रकार 'टी: MyInterface' के पैरामीटर वाले विधि का प्रतिनिधित्व करता है। फ़ंक्शन हस्ताक्षर संगत नहीं हैं, यह रिलीज़ नहीं किया जाता है कि 'टी'' MyInterface' का व्युत्पन्न है, हस्ताक्षर केवल तभी संगत होगा यदि 'टी' बिल्कुल 'MyInterface' था। –
@ पाओलो टेडेस्को माफी, यह किसी अन्य कोड से पुनर्निर्मित और सरलीकृत है। कॉपी/पेस्ट त्रुटि –