c# - Transmitir<Derived> genérico a<Base> genérico
wpf oop (1)
No puede emitir un
Generic<Derived>
Generic<Base>
a un
Generic<Base>
.
Solo imagina si pudieras.
Tiene una
List<Wolf>
y la convierte en una
List<Animal>
.
Ahora podría
.Add()
una
Sheep
a su
List<Animal>
.
Pero espera ... ahora tu
List<Wolf>
contiene una
Sheep
.
Que desastre.
Esto solo funcionaría si pudieras asegurarte de que lo que emites sea de solo lectura en todas las formas posibles. Esto es msdn.microsoft.com/en-US/library/dd799517(v=vs.110).aspx se trata. Sin embargo, solo funciona para interfaces.
Tengo un WPF UserControl base que maneja algunas funciones comunes para los UserControls derivados. En el código subyacente de cualquier UserControl derivado, llamo un evento
private void SomeClick(object sender, RoutedEventArgs e) {
HandleClick(sender);
MyDataGrid.Items.Refresh();
}
En mi base UserControl hago
public class BaseUserControl : UserControl {
protected void HandleClick(object sender) {
var vm = (BaseViewModel<Part>)DataContext;
...
}
}
Esto arroja una
InvalidCastException
ya que
DataContext
es de tipo
BaseViewModel
pero de un tipo derivado como
BaseViewModel<Wire>
o
BaseViewModel<Connector>
.
¿Cómo puedo lanzar eso?