为什么’Func ‘编译’Func ,其中TGeneric:IBase’没有?

为什么下面的集团错了?

public interface IBase { } public class ClassX : IBase { } public class ClassY { public static ClassX FunctionReturnX() { return new ClassX(); } } public class ClassZ where TGeneric : IBase { Func funcInterface = ClassY.FunctionReturnX; //Right Func funcGeneric = ClassY.FunctionReturnX; //Wrong } 

总之,您不能将ClassX为任何实现IBase类。 您只能保证能够将其投射到IBase本身。 考虑这个例子:

想象一下,你有一个实现IBase的类ClassA ,如下所示:

 public class ClassA : IBase { } 

现在, ClassZ看起来像这样(这不是真正的代码):

 public class ClassZ { Func funcInterface = ClassY.FunctionReturnX; //Right Func funcGeneric = ClassY.FunctionReturnX; //Wrong } 

ClassY.FunctionReturnX返回可以转换为IBase ClassX ,但不能将其ClassY.FunctionReturnXClassA 。 因此,您会收到并发症错误。

因为ClassX肯定是一个IBase ,但它可能不是TGeneric因为其他东西可能实现IBase并用于TGeneric