声明泛型类的变量

时间:2014-12-18 08:17:38

标签: c# generics

我有以下抽象类:

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是一个抽象类。删除&#34; new()&#34;约束对我来说不是一个解决方案,因为我需要实例化&#34; TwoNames&#34;的新对象。在我的抽象类(ViewModel)中。还有其他想法吗?

1 个答案:

答案 0 :(得分:5)

您需要创建一个非泛型基类:

public abstract class ViewModel : ObservableObject
{
    ...
}

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

并将_currentViewModel声明为ViewModel类型:

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