首页 >后端开发 >C++ >为什么我不能在WPF USERCORTROL中对仿制药施加通用?

为什么我不能在WPF USERCORTROL中对仿制药施加通用?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-28 18:33:10943浏览

Why Can't I Cast Generic to Generic in WPF UserControls?

WPF UserControl泛型转换:从派生泛型到基类泛型的转换问题

在WPF中,多个UserControl共享相同功能时,通常会定义一个基类UserControl,并在派生UserControl的代码隐藏中处理事件。然而,在某些情况下,尝试在基类UserControl中将DataContext转换为泛型基类型时,可能会遇到InvalidCastException异常。

该异常的出现是因为DataContext的类型是派生类型(例如,BaseViewModel<wire>BaseViewModel<connector>),而您试图将其转换为基类型(BaseViewModel)。这是因为无法将Generic<派生类型>转换为Generic<基类型>

从概念上讲,这类似于将List<wolf>转换为List<animal>。这允许您将一只羊添加到List<animal>中,但这会破坏List<wolf>的完整性,可能导致不一致。

唯一例外的情况是使用接口并利用协变和逆变等概念,但这只适用于接口,而不适用于类。因此,在您的场景中,无法将Generic<派生类型>转换为Generic<基类型>

以上是为什么我不能在WPF USERCORTROL中对仿制药施加通用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn