पर नहीं डाला जा सकता है मुझे पता है कि यह पुराना है, फिर भी मैं उन समस्याओं को समझने के लिए अभी भी बहुत अच्छा नहीं हूं। क्या कोई मुझे बता सकता है कि निम्नलिखित क्यों काम नहीं करता है (कास्टिंग के बारे में runtime
अपवाद फेंकता है)?जेनिक्स और कास्टिंग - विरासत वर्ग को बेस क्लास
public abstract class EntityBase { }
public class MyEntity : EntityBase { }
public abstract class RepositoryBase<T> where T : EntityBase { }
public class MyEntityRepository : RepositoryBase<MyEntity> { }
और अब कास्टिंग लाइन:
MyEntityRepository myEntityRepo = GetMyEntityRepo(); // whatever
RepositoryBase<EntityBase> baseRepo = (RepositoryBase<EntityBase>)myEntityRepo;
तो, किसी को समझा सकते हैं कि यह कैसे अमान्य है? और, मैं समझाने के मूड में नहीं हूं - क्या इस कोड को वास्तव में करने के लिए मैं कोड का एक लाइन उपयोग कर सकता हूं?
उत्तर के लिए सभी को धन्यवाद। इसे कम करने के लिए - अब मैंने बेस इंटरफ़ेस के साथ इस समस्या का समाधान किया (रिपोजिटरीबेस: आईरिपोजिटरी)। बाहर निकलता है मुझे बस उस उदाहरण पर कार्यों को निष्पादित करने की आवश्यकता होती है जो मुझे मिलती है और कक्षा को अन्य चीजों को संभालने देती है। –
Jefim
[सी # कोविरिएन्स और कंट्रावायरेंस एफएक्यू] देखें (http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx) –