2012-08-31 21 views
5

है संकलन निम्नलिखित करना संभव है बिना:सामान्य प्रकार कास्ट प्रकार बाधा इंटरफेस करने

  1. IFooCollection सामान्य
  2. स्पष्ट रूप FooCollection पर IFooCollection.Items को लागू करने और एक स्पष्ट डाली प्रदर्शन करना।

public interface IFoo 
{ 

} 

public interface IFooCollection 
{ 
    IEnumerable<IFoo> Items { get; } 
} 

public class FooCollection<T> : IFooCollection where T : IFoo 
{ 
    public IEnumerable<T> Items { get; set; } 
} 

मैं दूसरे समाधान के साथ पर्याप्त खुश हूँ (स्पष्ट इंटरफेस को लागू), लेकिन समझने के लिए कारण है कि मैं IFoo रूप T कास्ट करने के लिए जब हम एक सामान्य बाधा को निर्दिष्ट है कि है की जरूरत चाहते हैं T चाहिए IFoo लागू करें।

IFooCollection.Items किसी भी वर्ग कि IFoo लागू करता हो सकते हैं:

उत्तर

9

कारण निम्नलिखित है। तो इसमें एक ही समय में FooA, FooB, FooC शामिल हो सकते हैं।

FooCollection<FooA>.Items दूसरी तरफ केवल FooA प्रकार के तत्व हो सकते हैं। FooB या FooC से FooA को InvalidCastException का उत्पादन करने की कोशिश कर रहा है हालांकि सभी IFoo लागू करें।

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