C# 使用泛型在抽象类中调用构造函数

C# 使用泛型在抽象类中调用构造函数,c#,generics,C#,Generics,我有以下抽象基类: public abstract class MasterDataViewModel<TPrimaryModel> : ViewModel where TPrimaryModel : TwoNames, new() { ... } 公共抽象类MasterDataViewModel:ViewModel 其中TPrimaryModel:TwoNames,new() { ... } 我有一些派生类,如: public class ConsignorVi

我有以下抽象基类:

public abstract class MasterDataViewModel<TPrimaryModel> : ViewModel
    where TPrimaryModel : TwoNames, new()
{
    ...
}
公共抽象类MasterDataViewModel:ViewModel
其中TPrimaryModel:TwoNames,new()
{
...
}
我有一些派生类,如:

public class ConsignorViewModel : MasterDataViewModel<Consignor>
{
    protected override void Find()
    {           
        ...
        foreach (Consignor consignor in consignors)
        {
            ConsignorViewModel viewModel = new ConsignorViewModel(consignor, consignor.Address);
            SearchResults.Add(viewModel);
        }
        ...

    }
}
公共类委托人视图模型:MasterDataViewModel
{
受保护的覆盖无效查找()
{           
...
foreach(发货人中的发货人)
{
发货人视图模型viewModel=新发货人视图模型(发货人,发货人.地址);
SearchResults.Add(viewModel);
}
...
}
}
我想将Find方法移动到我的基类。问题是构造函数调用,这在我的抽象类中是不可能的。它必须是这样的:

protected override void Find()
{         
    ...
    foreach (TPrimaryModel primaryModel in results)
    {
        MasterDataViewModel<TPrimaryModel> viewModel = new MasterDataViewModel(primaryModel, primaryModel.Address);
        SearchResults.Add(viewModel);
    }
    ...
}
protected override void Find()
{         
...
foreach(结果中的TPrimaryModel primaryModel)
{
MasterDataViewModel viewModel=新的MasterDataViewModel(primaryModel,primaryModel.Address);
SearchResults.Add(viewModel);
}
...
}

它不起作用,因为抽象类中的构造函数调用是不允许的。还有其他解决办法吗?我想到了另一个通用的。问题是新的约束不能有任何参数,所以这也不起作用。

如果
MasterDataViewModel
/
委托人视图模型
类中的
Find()
方法正在创建该类的实例,那么这种类的设计听起来不正确。这似乎是
Find()
方法应该是一个静态助手类,但是我们没有看到
Find()
方法的所有代码,所以我不能肯定地说。如果不是静态方法,则应将
Find()
功能移出到另一个助手类

在基类“CreateViewModel”中创建一个抽象方法,在每个模型中重写该方法。或者使用Activator.CreateInstance方法创建此.GetType()子类的实例

第一个是最干净的。这样,你的类就成为了自己的工厂