为什么var List <myobject>(); work和var IEnumerable <myobject>();不行?

时间:2016-09-25 00:13:47

标签: c#

我正在学习c#并希望创建一个对象集合,我注意到以下奇怪的行为。

为什么

var abc = new List<MyObject>(); 

...工作和

var xyz = new IEnumerable<MyObject>(); 

......不行吗?

后者引发了错误:

  

无法创建抽象类或接口的实例。

是的,这一切都在谷歌上面,而且我读过许多 - 非常复杂的 - 我不能完全掌握的解释。

前者工作的事实和后者不是很有趣,我认为如果有人可以解释这两种 - 显然是相似的 - 陈述以及为什么一个有效而另一个没有?

1 个答案:

答案 0 :(得分:4)

IEnumerable是一个在语义和根本上都不同于类的接口。

界面就像一个&#34;模板&#34;对于一个类,就像一个类就像一个&#34;模板&#34;对于该类的实例。

您无法实例化界面,因为界面本身并没有实际执行任何操作。你当然可以这样做:

IEnumerable<MyObject> xyz = new List<MyObject>();

这是因为List类实现了IEnumerable接口。接口用于将公共类组合在一起,而不会强迫它们互相攻击。

编辑: 关于你的问题,他们不一样,不。您仅限于接口实现的方法。您需要将该对象强制转换为List<MyObject>才能使用List实现的方法。

了解更多: C# Interfaces