摘要: IEnumerable和IEnumerator有什么区别? 问题的提出:见(C#高级编程P127)public interface IEnumerable{ IEnumerator GetEnumerator();}public interface IEnumerator{ bool MoveNext(); void Reset(); Object Current { get; }}IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题)。研究了半天,得到以下几点认识:1、一个Collection要支持foreach方式的. 阅读全文
posted @ 2011-05-30 15:40 Kingdom_0 阅读(310) 评论(0) 推荐(0) 编辑
摘要: C#的foreach 语句不会解析为IL 代码中的foreach 语句。C#编译器会把foreach 语句转换为IEnumerable 接口的方法和属性。下面是一个简单的foreach 语句,它迭代persons 数组中的所有元素,并逐个显示它们:foreach (Person p in persons){Console.WriteLine(p);}foreach 语句会解析为下面的代码段。首先,调用GetEnumerator()方法,获得数组的一个枚举。在while 循环中-- 只要MoveNext()返回true-- 用Current 属性访问数组中的元素:IEnumerator enum 阅读全文
posted @ 2011-05-30 15:16 Kingdom_0 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 有许多方法扩展类。如果有类的源代码,继承就是给对象添加功能的好方法。但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要类的源代码。扩展方法是静态方法,是类的一部分,但实际上没有放在类的源代码中。假定上例中的Money类需要一个方法AddToAmount(decimal amountToAdd)。但是,由于某种原因,程序集最初的源代码不能直接修改。此时就可以创建一个静态类,把方法AddToAmount 添加为一个静态方法。代码如下:namespace Chapter3.Extensions{public static class MoneyExtension{publi 阅读全文
posted @ 2011-05-30 09:45 Kingdom_0 阅读(325) 评论(2) 推荐(0) 编辑