|
|
1
27
这里有几个问题。 首先:“我可以将老虎类型的对象分配给动物类型的变量。为什么我不能将老虎类型列表的对象分配给动物类型列表的变量?” 因为这样会发生:
在C 4中,这样做是合法的:
这是合法的,因为
有关C 4这个新特性的详细信息,请参阅我关于协方差的系列文章。 http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx 第二个问题:“我如何从某种动物身上初始化老虎的新实例?” 你不能。有问题的动物可能是瓢虫。如何从瓢虫的实例初始化一个新的老虎?这没有任何意义,所以我们不允许你这么做。如果你想写你自己的方法,知道如何把任意的动物变成老虎,你可以自由地这样做。但我们不知道如何为你做到这一点。 |
|
2
3
那是永远不会奏效的;毕竟
即使在4.0中,协变/逆变也不会扩展到:列表(两者都是
有趣的是,它
将
(并且始终具有)用于引用类型数组,但仅限于方向
|
|
|
3
1
不,因为您不能确定listx中所有类型为“x”的项也属于y类型。
在C++中,也没有像C++一样可用的“复制构造函数”,所以我担心你必须实现这个逻辑,以便能够从某个X,你自己初始化一个新的Y实例。 另外,记住类是引用类型… |
|
|
4
1
它不能自动将对象类型从x“加宽”到y,因为x不是y,而是y 是 X。
你可以试着从X到Y,但这会失败的。
|
|
|
5
1
试试这个:
|
|
|
6
0
您的场景与通常的多态用例有点背道而驰。y是x,但x不是y。 考虑到这一点,你可以 力 它按照您所说的方式工作,在构造函数中放置克隆代码,等等。 |
|
|
7
0
对于第一个示例,您将遇到的问题是y从x派生,因此它“是x”,但“x不是y”,而且c目前不支持此方法中的类型转换。您可以尝试将扩展方法用于强制转换,例如lstx.convertall作为帮助器来完成此操作。 对于第二个问题,您需要研究一个复制构造函数,例如:
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |