使用泛型调用抽象类中的构造函数
本文关键字:构造函数 抽象类 调用 泛型 | 更新日期: 2023-09-27 18:35:24
我有以下抽象的基类:
public abstract class MasterDataViewModel<TPrimaryModel> : ViewModel
where 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);
}
...
}
}
我想将 Find 方法移动到我的基类。问题是构造函数调用在我的抽象类中是不可能的。它必须是这样的:
protected override void Find()
{
...
foreach (TPrimaryModel primaryModel in results)
{
MasterDataViewModel<TPrimaryModel> viewModel = new MasterDataViewModel(primaryModel, primaryModel.Address);
SearchResults.Add(viewModel);
}
...
}
它不起作用,因为不允许在抽象类中进行构造函数调用。还有其他解决方案吗?我想到了另一个通用。问题是新约束不能有任何参数,所以这也不起作用。
如果 MasterDataViewModel
/ConsignorViewModel
类中的 Find()
方法正在创建类的实例,则这种类设计听起来不正确。这似乎Find()
方法应该是一个静态帮助程序类,但我们没有看到Find()
方法的所有代码,所以我不能肯定地说。如果不是静态方法,则应将Find()
功能移出到另一个帮助程序类。
在基类"CreateViewModel"中创建一个抽象方法,您可以在每个模型中重写该方法。或者使用 Activator.CreateInstance 方法创建 this 的实例。GetType() 子类。
第一个是最干净的。这样,您的类就可以成为自己的工厂。