通用方法类型不能用作通用类的通用类型

时间:2019-08-06 10:49:29

标签: c#

我想实现一个通用方法,该方法应该创建一个双重通用对象的实例。 应该实例化的此类的通用类型是另一个类和第一个类型必须实现的接口。 当我在泛型方法中使用泛型类型调用new时,即使将类型正确限制在基本接口上,也会出现编译器错误Timer timer = new Timer(); TimerTask timerTask = new TimerTask() { @Override public void run() { //some execution } }; timer.schedule(timerTask, 5000, 5000); 。 为什么我不能创建这样的实例?

CS0311

1 个答案:

答案 0 :(得分:2)

假设您具有以下定义:

interface IEntityBase { }

interface ITESTEntity : IEntityBase { }

class TESTEntity : ITESTEntity { }

那么您的问题就出在这里:

class myQuery<T, I> 
    where T : class, I
    where I : IEntityBase

您要说明T必须可分配给I,并且I必须可分配给IEntityBase。很好,但是在这里:

static void GetQuery<I>() where I : IEntityBase
{
    var qry = new myQuery<TESTEntity, I>();

您接受任何可分配给I的{​​{1}}。因此,您也可以这样称呼它:

IEntityBase

此调用将是有效的,但现在在您的方法interface ITESTEntity2 : IEntityBase { } class TESTEntity2 : ITESTEntity2 { } GetQuery<ITESTEntity2>(); 中:

GetQuery()

new myQuery<TESTEntity, I>(); 将是IITESTEntity2不可分配。无法保证TESTEntity可分配给任何TESTEntity,其中I可分配给I,如上面的IEntityBase所示。

因此,请重新考虑您的设计。