首页 新闻 会员 周边

C#泛型实例化

0
[已解决问题] 解决于 2017-09-18 17:58
复制代码
public class List<X,Y>
    where X:Template<Y>
{
    public X GetX ( )
    {
        return new Template<Y> ( ); //提示:无法将Template<Y>转换为X
    }
}
复制代码

请问为什么不能在GetX中return一个Template<Y>的实例?即使X的约束可能是一个Template<Y>或Template<Y>的派生,但确定Y之后,这个操作按理来说应该没问题的,为什么编译器认为这可能是一次逆转?

寒食的主页 寒食 | 初学一级 | 园豆:98
提问于:2017-09-18 17:35
< >
分享
最佳答案
0

你这个是父类转子类.是不行的. 放getx的类型改成templatey吧.

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2017-09-18 17:39

是啊,就是不明白编译器为什么会认为这是父转子呢?谢谢。

寒食 | 园豆:98 (初学一级) | 2017-09-18 17:44

@寒食: 因为本来就是父转子..

你new的就是父类对象.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-09-18 17:50

@吴瑞祥: 明白了,因为无法确定提供类型实参时用户传递的究竟是子还是父,假如是子,就会出现转换失败,多谢!

寒食 | 园豆:98 (初学一级) | 2017-09-18 17:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册