为什么’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.FunctionReturnX
为ClassA
。 因此,您会收到并发症错误。
因为ClassX
肯定是一个IBase
,但它可能不是TGeneric
因为其他东西可能实现IBase
并用于TGeneric
。