左侧接口

Boo*_*lor 3 c#

我知道我们无法创建实例Interface.但为什么我们可以写Interface在左边?那些仅仅是Interface的引用(对于实现这个的类)是实例吗?

如果我们无法创建Interface实例,那么P这个例子中的类型是什么?

string[] names = {"John", "Bob", "Mark"};
IEnumerable<string> P = names.Where(n => n.Contains('o'));
Run Code Online (Sandbox Code Playgroud)

Sim*_*mon 6

P 是类型的 IEnumerable<string>

在这里,您将声明局部变量的类型P.

P保存类型IEnumerable<string>,并且在不直接实例化接口时,可以实例化具体类,但只需保存对接口的引用.

通过Where()调用返回的实例只需遵守IEnumerable<string>定义的合同.