jue*_*n d 11 c# oop wpf casting covariance
我有一个基础WPF UserControl,它处理派生UserControls的一些常用功能.在任何派生的UserControl的代码隐藏中,我调用一个事件
private void SomeClick(object sender, RoutedEventArgs e) {
HandleClick(sender);
MyDataGrid.Items.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
在我的基础UserControl我做
public class BaseUserControl : UserControl {
protected void HandleClick(object sender) {
var vm = (BaseViewModel<Part>)DataContext;
...
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发InvalidCastException,因为DataContext
它是类型BaseViewModel
但派生类型如BaseViewModel<Wire>
或BaseViewModel<Connector>
.
我怎么能这样做?
nvo*_*igt 20
你不能投Generic<Derived>
一个Generic<Base>
.
想想你是否可以.你有一个List<Wolf>
并把它投射到一个List<Animal>
.现在,你可以.Add()
一个Sheep
你List<Animal>
.但是等等......现在你的List<Wolf>
包含了Sheep
.真是一团糟.
只有在确保所投射的内容以所有可能的形式呈现为只读时,才能解决此问题.这是合作和逆转的全部.它只适用于接口.
归档时间: |
|
查看次数: |
1798 次 |
最近记录: |