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

C# 转换错误的泛型方法调用原因?,c#,generics,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 n

泛型方法调用-没有从“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);
    ...
}
公共接口IValueFox:IValue
{
...
}
私有模拟GenerateMockValue(状态,T类型)
我在哪里上课,伊瓦鲁福克斯
{
...
}
私有void TestFoxValues()
{
var newFox=this.GenerateMockValue(State.Red,null);
...
}
在方法“TestFoxValues”中调用“GenerateMockValue”时出现以下错误:

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

但我真正不明白的是,既然IValueFox实现了IValue,为什么需要进行任何转换。有人能为我澄清这个问题吗


提前谢谢

因为你需要一个IValueFox,这就像是IValue的超集。(每个艾瓦鲁埃克斯都是艾瓦鲁埃克斯,但不是每个艾瓦鲁埃克斯都是艾瓦鲁埃克斯)

因此,IValue不能转换为IValueFox

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

下面是一个更简单的例子: 你们班需要一辆车。汽车是一种轮式机动车辆。
然后再往下说,“这里,我给你提供了一辆轮式机动车,但我没有告诉你它到底是什么。可能是一辆摩托车。”然后你的班级说“我明确要求一辆车!”,因为你需要一辆IValueFox,这就像是IValue的超集。(每个艾瓦鲁埃克斯都是艾瓦鲁埃克斯,但不是每个艾瓦鲁埃克斯都是艾瓦鲁埃克斯)

因此,IValue不能转换为IValueFox

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

下面是一个更简单的例子: 你们班需要一辆车。汽车是一种轮式机动车辆。
然后再往下说,“我给你们提供了一辆有轮子的汽车,但我并没有告诉你们它到底是什么。可能是一辆摩托车。”然后你们班说“我明确要求一辆车!”汽车和轮子将是一个组成的例子,而不是继承的例子,是学究式的。你们说得对。我把这个例子改成了“轮式机动车辆”:-)汽车和车轮将是一个组成的例子,而不是继承的例子,学究式的。你说得对。我将示例修改为“轮式机动车辆”:-)