为什么public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)扩展方法可以由普通字符串数组实例对象调用?根据扩展方法的调用规则来看,实例对象如果需要调用该扩展方法,那该对象的类型需要实现IEnumerable<TSource> 接口,但是c#普通字符窜数组是array类的实例,而array只实现了Ienumerable接口,并未实现Ienumerable<T>接口,根据扩展方法的调用规则普通字符串数组实例就不能调用该扩展方法,请问如何解释?
可以这么理解:IEnumerable<T>接口(包含)了IEnumerable接口。IEnumerable接口是IEnumerable<T>的一种特殊情况而已。
虽然可以这么理解,但是从严格的语法角度来讲,似乎行不通啊,毕竟Array实现的是Ienumerable,而Ienumerable<T>继承Ienumerable,因此Ienumerable<T>中的一些成员未必由Array实现的。
Array只实现了Ienumerable没错,但是String[]是Array的子类,这个在sdk文档里面是看不到的,应该是子类实现了IEnumerable<T>