我正在学习c#并希望创建一个对象集合,我注意到以下奇怪的行为。
为什么
var abc = new List<MyObject>();
...工作和
var xyz = new IEnumerable<MyObject>();
......不行吗?
后者引发了错误:
无法创建抽象类或接口的实例。
是的,这一切都在谷歌上面,而且我读过许多 - 非常复杂的 - 我不能完全掌握的解释。
前者工作的事实和后者不是很有趣,我认为如果有人可以解释这两种 - 显然是相似的 - 陈述以及为什么一个有效而另一个没有?
答案 0 :(得分:4)
IEnumerable
是一个在语义和根本上都不同于类的接口。
界面就像一个&#34;模板&#34;对于一个类,就像一个类就像一个&#34;模板&#34;对于该类的实例。
您无法实例化界面,因为界面本身并没有实际执行任何操作。你当然可以这样做:
IEnumerable<MyObject> xyz = new List<MyObject>();
这是因为List
类实现了IEnumerable
接口。接口用于将公共类组合在一起,而不会强迫它们互相攻击。
编辑:
关于你的问题,他们不一样,不。您仅限于接口实现的方法。您需要将该对象强制转换为List<MyObject>
才能使用List
实现的方法。
了解更多: C# Interfaces