c# - कास्ट जेनेरिक<व्युत्पन्न> जेनेरिक<बेस> के लिए



wpf oop (1)

मेरे पास एक आधार WPF UserControl है जो व्युत्पन्न UserControls के लिए कुछ सामान्य कार्यक्षमता को संभालता है। किसी भी व्युत्पन्न UserControl के कोड-पीछे में मैं एक घटना कहता हूं

private void SomeClick(object sender, RoutedEventArgs e) {
    HandleClick(sender);
    MyDataGrid.Items.Refresh();
}

मेरे आधार में UserControl मैं करता हूँ

public class BaseUserControl : UserControl {
   protected void HandleClick(object sender) {
       var vm = (BaseViewModel<Part>)DataContext;
       ...
   }
}

यह एक InvalidCastException फेंकता है क्योंकि DataContext BaseViewModel लेकिन BaseViewModel<Wire> या BaseViewModel<Connector> जैसे एक व्युत्पन्न प्रकार का है।

मैं वह कैसे कर सकता हूं?


आप Generic<Derived> को Generic<Base> नहीं डाल सकते।

जरा सोचिए अगर आप ऐसा कर सकें। आपके पास एक List<Wolf> और इसे एक List<Animal> डाल दें। अब आप .Add() अपनी List<Animal> लिए एक Sheep कर सकते हैं। लेकिन रुकिए ... अब आपकी List<Wolf> में एक Sheep शामिल है। क्या झंझट है।

यह केवल तभी काम करेगा जब आप यह सुनिश्चित कर सकते हैं कि आपके द्वारा डाली गई चीज केवल सभी संभावित रूपों में ही पढ़ी जाती है। यह msdn.microsoft.com/en-US/library/dd799517(v=vs.110).aspx था msdn.microsoft.com/en-US/library/dd799517(v=vs.110).aspx सब के बारे में है। यह केवल इंटरफेस के लिए काम करता है।





covariance