- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个类 X 和一个类 Y,后者派生自 X:
class x {}
class y : x {}
然后我在某处使用 X 的列表:
List<X> lstX;
...
然后我想使用一个新的 Y 列表,来 self 的另一个列表中的数据......类似这些:
List<Y> lstY = lstX;
我相信 X 列表中的项目会自动转换为 Y,但事实并非如此。
此外,我如何从某个 X 初始化 Y 的新实例?我想这样做:
var newX = new X();
var newY = new Y(X);
但它似乎并不像那样工作。
感谢您的帮助!抱歉格式化,尽我所能
最佳答案
这里有几个问题。
第一:“我可以将Tiger类型的对象赋值给Animal类型的变量。为什么我不能将Tiger类型的List对象赋值给Animal类型的变量?”
因为这会发生:
List<Tiger> tigers = new List<Tiger>();
List<Animal> animals = tigers; // this is illegal because if we allow it...
animals.Add(new Giraffe()); // ... then you just put a giraffe into a list of tigers.
在 C# 4 中,这样做是合法的:
IEnumerable<Tiger> tigers = new List<Tiger>();
IEnumerable<Animal> animals = tigers;
这是合法的,因为IEnumerable<T>
没有“添加”方法,因此可以保证这是安全的。
有关 C# 4 的这一新功能的详细信息,请参阅我关于协方差的系列文章。
http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx
第二个问题:“我如何从某个 Animal 初始化 Tiger 的新实例?”
你不能。有问题的动物可能是瓢虫。你打算如何从 Ladybug 实例初始化一个新的 Tiger?那没有任何意义,所以我们不允许您这样做。如果您想编写自己的知道如何将任意动物变成老虎的特殊方法,您可以自由地这样做。但我们不知道如何为您做到这一点。
关于C#多态简单题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231668/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!