泛型方法调用转换错误的原因?

时间:2013-04-09 20:45:12

标签: c# generics

泛型方法调用 - 没有从“IValue”到“IValueFox”的隐式引用转换。这段代码的处理是什么?

public interface IValueFox : IValue
{
    ...
}

private Mock<I> GenerateMockValue<I, T>(State state, T type)
where I : class, IValueFox
{
    ...
}

private void TestFoxValues()
{
    var newFox = this.GenerateMockValue<IValue, object>(State.Red, null);
    ...
}

当我在方法'TestFoxValues'中调用'GenerateMockValue'时出现以下错误:

  

'IValue'不能用作泛型类型中的类型参数“I”或   方法'GenerateMockValue'。没有隐含的参考   从'IValue'转换为'IValueFox'。

但我真正理解的是,为什么需要进行任何转换,因为IValueFox实现了IValue。谁能为我澄清这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:3)

因为您需要IValueFox,就像 IValue的超集。 (每个IValueFox都是IValue,但不是每个IValue都是IValueFox)

因此,IValue无法转换为IValueFox。

where子句说“我需要一个IValueFox”,但在TestFoxValues()方法中,你说“我只是要提供一个IValue。”

这是一个更简单的例子: 你的课需要一辆车。汽车是轮式汽车。 然后再往下说“在这里,我为你提供了一辆轮式汽车,但我并没有告诉你到底是什么。可能是一辆摩托车”然后你上课说“我明确要求开车了!” &lt; ==这是你得到的错误。

相关问题