如何使用泛型创建实例
本文关键字:实例 创建 泛型 何使用 | 更新日期: 2023-09-27 18:05:39
我想做一些简单的事情:创建一个泛型实例。我得到一个错误,说我不能创建一个实例,因为我没有new
约束。然而,我确实在我的返回语句中有它!任何想法吗?
public IAction CreateAction<TA, TP>(ActionParamBase param)
where TA : IAction
where TP : ActionParamBase
{
Ensure.That(param).Is<TP>();
return new TA { Param = param as TP };
}
您必须在TA
类型参数上指定new()
约束,以便能够调用构造函数:
public IAction CreateAction<TA, TP>(ActionParamBase param)
where TA : IAction
, new()
where TP : ActionParamBase
{
...
}
只有这样它才知道(并强制)TA
有一个无参数的构造函数。
(只是一个小提示:它只适用于无参数构造函数,不适用于有参数的构造函数。在本例中,您可以使用初始化式)
这意味着在TA部分的约束中有new
。参考这篇文章,然后看看下面的代码:将参数传递给模板类型为
public IAction CreateAction<TA, TP>(ActionParamBase param)
where TA : IAction, new()
where TP : ActionParamBase
{
Ensure.That(param).Is<TP>();
return new TA { Param = param as TP };
}