C# 泛型会中断继承
本文关键字:继承 中断 泛型 | 更新日期: 2023-09-27 18:33:54
希望这是一个快速的问题。我有一个继承自窗口(WPF)的C#类。我想将其视为模态对话框,并尝试使对话框接受泛型类型。代码如下:
public partial class PickingOptionsDialog<T> : Window
{
private T _SelectedOption;
public PickingOptionsDialog(ECartState State, String Bin)
{
InitializeComponent();
DataContext = new OptionsViewModel(State, Bin);
}
public PickingOptionsDialog()
{
InitializeComponent();
DataContext = new OptionsViewModel(ECartState.Picking, "1");
}
public T SelectedOption
{
get { return _SelectedOption; }
}
}
使用此代码,我收到一个编译时错误,指出当前上下文中不存在 InitializeComponent()。为什么要这样做?
除了这个问题之外,我还想使允许的泛型类型必须是 Enum。在java中(如果Enum是一种类型),我可以像< T extends Enum >
一样做到这一点。如何在 C# 中完成此操作?
要回答您的第一个问题:您必须将 type 参数添加到类的所有部分。在 WPF 情况下,这意味着您必须将其添加到 .xaml 中(因为从中生成InitializeComponent()
的实现)。不幸的是,您无法在 xaml 中声明模板参数(至少我不知道如何声明)。因此,简单的答案似乎是:使用 WPF 无法做到这一点。
对于第二个问题:您可以使用"where"子句,如
public class C<T> where T : struct
{
}
但是,您只能将 T 限制为值类型(或某些接口),而不能显式限制为枚举。