请问函数返回值为泛型接口的有关问题

请教函数返回值为泛型接口的问题。
本帖最后由 ksly2008 于 2015-01-08 12:19:59 编辑
XElement xe = XElement.Load(xmlFilePath);
        IEnumerable<XElement> element = from item in xe.Descendants("ThemeName")
                                        select item; 
XElement first = element.First();
中间这个语句返回一个泛型的接口,最后这句话还调用了接口的方法,请教一下,接口的任何方法是没有实现的,只是有声明,为什么可以直接调用泛型接口的方法?另外就是 请教下接口只是一种声明性的东西,为什么可以作为方法的返回值,该怎么去理解?
------解决思路----------------------
那是Linq语法,在System.Linq.Enumerable类中定义的扩展方法,原型时
public static TSource First<TSource>(this IEnumerable<TSource> source);
并不是IEnumerable中定义的方法,其实你可以在VS中,按F12转到方法的定义就知道了
扩展方法你查下资料
------解决思路----------------------
类基础接口
使用的时候,接口被实例化具体的类对象,那么通过接口调用方法,就是调用实例化的类对象实现的接口方法
------解决思路----------------------
虽然返回的是接口,但绝不可能是纯接口,而是实现了该接口的某个具体的类,只是无需关心罢了.
好比说小明回家对妈妈说,我饿了来点吃的,这"能吃的"是个接口,而实际上吃到的是"面包","米饭"等具体的对象.