声明泛型类的变量

蚊子87

我有以下抽象类:

public abstract class ViewModel<TPrimaryModel> : ObservableObject
    where TPrimaryModel : TwoNames, new()
{
    ...
}

在另一个类中,我想声明一个变量,在其中可以将ViewModel保存到:

public class MainViewModel
{
    private ViewModel _currentViewModel;
}

这不起作用,因为需要2个参数(由于通用)。我不介意将哪个ViewModel保存到_currentViewModel,只要该对象从抽象类ViewModel继承即可。

这也不能正常工作:

public class MainViewModel
{
    #region Members
    private ViewModel<TwoNames> _currentViewModel;
    #endregion
}

编译器错误:

The type 'typename' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'parameter' in the generic type or method 'generic'

这是因为TwoNames是抽象类。对于我来说,删除“ new()”约束不是一个解决方案,因为我需要在抽象类(ViewModel)中实例化“ TwoNames”的新对象。还有其他想法吗?

托马斯·列夫斯克

您需要创建一个非通用基类:

public abstract class ViewModel : ObservableObject
{
    ...
}

public abstract class ViewModel<TPrimaryModel> : ViewModel
    where TPrimaryModel : TwoNames, new()
{
    ...
}

并声明_currentViewModel为type ViewModel

public class MainViewModel
{
    #region Members
    private ViewModel _currentViewModel;
    #endregion
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章