尝试在上层类型中存放下层类型。解决这个错误,也需要解决两个问题:
(1)在调用s()方法时,实际上调用的是p()方法,即,p能够转换为s类型。
(2)解除编译器的检查限制,在此处允许将Work类型的对象赋值给Work类型的变量。
对于(1)因为Student为Person的子类,所以二者存在联系,通过强制类型转换可以实现;而条件(2)需要在委托中加上in关键字。 【注:如果没有子父类的关系,加上in/out关键字,也无法实现】
简而言之:协变可以在上层数据类型中存放下层对象;逆变可以在下层的数据类型中存放上层对象(这里的上层与下层是相对而言),这两个过程本质上是参数的类型转换。
据微软官方的说法,协变于逆变只发生在数组、委托、泛型参数之上,对于类的上下转型而言不算做协变于逆变。
TRANSLATE with <img id="FloaterLogo"> x English
<img alt="" ><img id="HelpImg"><img id="EmbedImg"><img id="ShareImg"> TRANSLATE with <img id="CollapsedLogoImg"> COPY THE URL BELOW <img id="EmailImg"> <img id="ShareHelpImg"> Back EMBED THE SNIPPET BELOW IN YOUR SITE <img id="EmbedHelpImg">Enable collaborative features and customize widget: Bing Webmaster PortalBack
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!