为什么var List();MyObject>();不工作

本文关键字:MyObject 工作 var List 为什么 | 更新日期: 2023-09-27 18:08:52

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

为什么

var abc = new List<MyObject>(); 

…工作和

var xyz = new IEnumerable<MyObject>(); 

…不工作吗?

后者引发错误:

不能创建抽象类或接口的实例。

是的,这在谷歌上到处都是,我读过许多非常复杂的解释,我没有完全理解。

前者起作用而后者不起作用的事实很有趣,我认为如果有人能把这两个显然相似的陈述进行对比,以及为什么一个起作用而另一个不起作用,这将会很有用。

为什么var List<MyObject>();MyObject>();不工作

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

接口就像一个类的"模板",就像一个类的实例的"模板"一样。

你不能实例化一个接口,因为接口本身实际上不做任何事情。你当然可以这样做:

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

这是因为List类实现了IEnumerable接口。接口用于将公共类分组在一起,而不强制它们相互继承。

编辑:关于你的问题,它们不一样。您将自己限制在接口实现的方法中。您需要将该对象强制转换为List<MyObject>,以便能够使用List实现的方法。

阅读更多:c#接口