我有一个基本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()
的Sheep
到您的List<Animal>
。但是等等...现在您的List<Wolf>
包含一个Sheep
。真是一团糟。
这只有在您可以确保所铸造的东西仅在所有可能的形式中读取的东西时才能解决。这是共同的,而违反的全部是有关的。它仅适用于接口。