为什么’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
。
上述就是C#学习教程:为什么’Func ‘编译’Func ,其中TGeneric:IBase’没有?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/989036.html