所以我试图将一些WPF视图/视图模型抽象为解耦的可重用对象。现在我陷入困境,以至于我甚至不确定下一步该尝试什么。我希望那里的人可以帮助解锁我的大脑。
这是一个简化的示例和错误
public interface IBasicListDto{}
public interface IBasicListVm<T> where T : IBasicListDto
{
void DoSomthing();
}
public class BasicListVm<T> : IBasicListVm<T> where T : IBasicListDto
{
public void DoSomthing()
{
Console.WriteLine("woohoo!!");
}
}
public class MyBasicListDto : IBasicListDto{}
public class MyBasicListVm<T> : BasicListVm<T> where T : MyBasicListDto {}
private void Button_Click(object sender, RoutedEventArgs e)
{
IBasicListVm<IBasicListDto> vm = (IBasicListVm<IBasicListDto>)new MyBasicListVm<MyBasicListDto>();
vm.DoSomthing();
}
我在Button_Click方法的第一行遇到以下运行时错误。
System.InvalidCastException未处理
的HResult = -2147467262
Message =无法转换类型为'MyBasicListVm 1[testGenericInheritance.MainWindow+MyBasicListDto]' to type 'IBasicListVm
1 [testGenericInheritance.MainWindow + IBasicListDto]'的对象。
来源= testGenericInheritance
堆栈跟踪:
我已经看到了一些类似的问题/答案,但我的大脑并不是“得到它”足以做出必要的改变。
答案 0 :(得分:0)
您可以IBasicListVm<T>
协变:
public interface IBasicListVm<out T> where T : IBasicListDto
{
void DoSomthing();
}