2016-05-02 10 views
5

सामान्य कोड सामान्य कोड के लिए संकलन त्रुटि क्यों देता है?कॉन्वर्स और सामान्य प्रकार

abstract class Test<TItem> where TItem : IFoo 
{ 
    public IEnumerable<IFoo> Foos { get; set; } 

    public void Assign() 
    { 
     Foos = GetSomeSpecificList(); // works as expected 
     Foos = GetSomeGenericList(); // compile error? 
    } 

    protected abstract ICollection<TItem> GetSomeGenericList(); 

    protected abstract ICollection<Foo> GetSomeSpecificList(); 
} 

interface IFoo 
{ 
} 

class Foo : IFoo 
{ 
} 

मैं कुछ याद आ रही हूँ या नहीं दिया जाता है कि हर TItem एक IFoo होना चाहिए और इसलिए यह इस संरचना प्रकार सुरक्षा का उल्लंघन करने के लिए असंभव है?

उत्तर

7

आप एक class बाधा नहीं है, इसलिए TItemIFoo इंटरफेस को लागू करने के लिए एक struct प्रकार हो सकता है। कॉन्वर्सिस को संदर्भ प्रकार की आवश्यकता होती है। जब आप class बाधा जोड़ते हैं, तो यह बिना किसी समस्या के संकलित करता है।

संबंधित मुद्दे