为什么var List();MyObject>();不工作
本文关键字:MyObject 工作 var List 为什么 | 更新日期: 2023-09-27 18:08:52
我正在学习c#,想创建一个对象集合,我注意到以下奇怪的行为。
为什么
var abc = new List<MyObject>();
…工作和
var xyz = new IEnumerable<MyObject>();
…不工作吗?
后者引发错误:
不能创建抽象类或接口的实例。
是的,这在谷歌上到处都是,我读过许多非常复杂的解释,我没有完全理解。
前者起作用而后者不起作用的事实很有趣,我认为如果有人能把这两个显然相似的陈述进行对比,以及为什么一个起作用而另一个不起作用,这将会很有用。
IEnumerable
是一个在语义上和本质上都不同于类的接口。
接口就像一个类的"模板",就像一个类的实例的"模板"一样。
你不能实例化一个接口,因为接口本身实际上不做任何事情。你当然可以这样做:
IEnumerable<MyObject> xyz = new List<MyObject>();
这是因为List
类实现了IEnumerable
接口。接口用于将公共类分组在一起,而不强制它们相互继承。
编辑:关于你的问题,它们不一样。您将自己限制在接口实现的方法中。您需要将该对象强制转换为List<MyObject>
,以便能够使用List
实现的方法。
阅读更多:c#接口