Mar*_*rko 3 c# ienumerable interface
我正在学习界面.我一直在阅读一些书籍/文章,到目前为止一直很好 - 我已经写了一些我自己的样本界面.好极了 :)
现在,我注意到最受欢迎的C#接口之一是IEnumerable接口.它被用于各种各样的收藏等等.
无论如何,我想检查它,意图进一步了解它是如何工作的.我搜索过谷歌,但我似乎无法找到对实际源代码的引用,但我想它会包含接口本身,以及包含各种方法的类.
那么,有人能帮忙吗?
非常感激
IEnumerable非常简单:
[ComVisibleAttribute(True)]
[GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
而且为了完整性,IEnumerator
[ComVisibleAttribute(true)]
[GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerator
{
Object Current {get;}
bool MoveNext();
void Reset();
}
Run Code Online (Sandbox Code Playgroud)
但更常见的是,您在代码示例中看到的是IEnumerable <T>
public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
IEnumerator GetEnumerator(); //inherited from IEnumerable
}
Run Code Online (Sandbox Code Playgroud)
而且为了完整性,IEnumerator <T>(带有IDisposable):
public interface IEnumerator<out T> : IDisposable, IEnumerator
{
void Dispose(); //inherited from IDsiposable
Object Current {get;} //inherited from IEnumerator
T Current {get;}
bool MoveNext(); //inherited from IEnumerator
void Reset(); //inherited from IEnumerator
}
[ComVisibleAttribute(true)]
public interface IDisposable
{
void Dispose();
}
Run Code Online (Sandbox Code Playgroud)
这就是它的全部内容.没有针对IEnumerable特有的任何直接实现代码或此处显示的相关代码.相反,像数组或List <T>这样的类型将继承IEnumerable并实现所需的方法.除此之外的所有其他事情都通过扩展方法完成.
使这一切变得更加强大的是这些项目:
foreach关键字支持循环任何具有GetEnumerator()返回IEnumerator 的方法的东西,因此您可以使用任何使用foreach循环实现IEnumerable的类型.yield关键字允许您创建一个名为迭代器块的东西.迭代器块具有一些简洁的属性(如惰性求值),并允许您轻松创建自己的IEnumerable类型,而无需首先解决定义新类的麻烦.最后,值得指出的是这里的IDisposable是另一个接口值得进一步研究,因为它使用相当多的框架,并具有类似的IEnumerable的直接语言支持foreach与using关键字.
IEnumerable<T> 仅仅是一个定义的接口:
public interface IEnumerable<T> : IEnumerable
{
// Methods
IEnumerator<T> GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
我假设您想要研究的大多数方法来自一堆主要位于System.Linq命名空间中的扩展方法System.Core.dll.看看Reflector吧.