`
朋-张
  • 浏览: 3989 次
社区版块
存档分类
最新评论

System.Collections.Generic.IEnumerable<T>接口

    博客分类:
  • c#
阅读更多

转自:http://hi.baidu.com/leifenglian/item/e682ae44a3f64a35fa8960b9
System.Collections.Generic.IEnumerable<T>接口
/*要实现System.Collections.Generic.IEnumerable<T>接口比较麻烦,这个接口有一个方法:GetEnumerator(),不过有两个重载版本
     * 第一:System.Collections.Generic.IEnumerator<T> GetEnumerator(),
     * 第二:System.Collections.IEnumerator GetEnumerator()...(注意这里的重载是以返回值为区别的,其实不然,这只是接口而已,还没有去实现).
     * 那么如何去实现这个方法呢?
     * 如下:必须同时有方法一、方法二,缺一不可.
     * 如果缺了方法一,编译错误:不实现接口成员"System.Collections.Generic.IEnumerable<string> GetEnumerator()",
     * 如果缺了方法二,编译错误:不实现接口成员"System.Collections.IEnumerable GetEnumerator()",因为它没有匹配的返回类型
     * "System.Collections.IEnumerator",所以两个方法缺一不可,而且方法二必须是显式实现接口,而不是像方法三那样隐式
     * 实现接口,如果像方法三那样写,编译错误:已定义了一个名为"GetEnumerator"的具有相同参数类型的成员,即这违反
     * 了重载的规则,所以必须显式实现接口,显式实现接口可以避免由于方法名和参数相同而引起的重载问题。值得一提
     * 的是,.NET中仅有返回值类型不同的重载方法范例是implicit,explicit自定义类型转换中的内容,详见书,CLR支持这种仅
     * 有返回值不同的重载,但并不被C#这样的高级语言所支持                                                                   * 另外值得一提的是:泛型技术,使得相同的参数列表、相同的返回值类型的情况也可以构成重载(如下MyFunc方法)
     */
    public class UserInfo : System.Collections.Generic.IEnumerable<string>
    {
        string[] users = { "wang", "zhang", "li" };
        //方法一
        public System.Collections.Generic.IEnumerator<string> GetEnumerator()
        {
            for (int i = 0; i < users.Length; i++)
            {
                yield return users[i];
            }
            yield break;
            yield return "BREAK";
        }
        //方法二
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();//IEnumerator<T>继承自IEnumerator
        }
        //方法三
        //public System.Collections.IEnumerator GetEnumerator()
        //{
        //    return GetEnumerator();
        //}
        public bool MyFunc<T>(string str, int id)
        {
            IList < T > temp = new List<T>();
            if (temp != null)
                return true;
            else
                return false;
        }
        public bool MyFunc(string str, int id)
        {
            return true;
        }
        public IList<string> MyList()
        {
            return null;
        }
        //public IList MyList()
        //{
        //    return null;
        //}
    }
补充几个概念:
枚举器:在C#中,一个对象只要实现System.Collections.IEnumerator或者System.Collections.Generic.IEnumerator<T>(继承自IEnumerator)接口,那么这个对象就是一个枚举器。
可枚举对象:是一个实现了System.Collections.IEnumerable或System.Collections.Generic.IEnumerable<T>(继承自IEnumerable)的对象。
迭代器就是用于生成一个既是枚举器又是可枚举对象的。
在.NET中,覆写实现了运行时的多态性,二重载实现了编译时的多态性
分享到:
评论

相关推荐

    C# System.Collections 非泛型接口方法解析.pdf

    在C#编程中,System.Collections命名空间包含了许多非泛型集合接口,这些接口是.NET框架早期版本的基础,尽管现在泛型集合接口(如`IEnumerable&lt;T&gt;`)更为常用,但理解非泛型接口对于维护旧代码或处理特定场景仍然很...

    C#重要知识之——泛型列表List例子

    `List&lt;T&gt;`是.NET框架中的一个类,位于`System.Collections.Generic`命名空间下。这里的`T`代表一个类型参数,允许我们创建一个可以存储特定类型对象的列表。例如,我们可以创建一个存储整数的`List&lt;int&gt;`或存储字符...

    C# 9.0新特性——扩展方法GetEnumerator支持foreach循环

    System.Collections.Generic.IEnumerable&lt;T&gt; System.Collections.Generic.IAsyncEnumerable&lt;T&gt; 该类型中有公开的无参GetEnumerator()方法,且其返回值类型必须是类,结构或者接口,同时返回值类型具有公共 Current...

    Cornucopia.Net:.NET的更多集合

    没有实现System.Collections.Generic.IEnumerable&lt;T&gt; 在适当的地方使用值类型 设计理念System.Collections命名空间为日常使用提供了大量的集合。 如果您不打算这样做,则可能是性能问题,并且已经放弃了System.Linq...

    CSharp_List.zip_C# list_C#中list_C#中list的用法_C#怎么引用List_c# list

    `List&lt;T&gt;`类是`System.Collections.Generic`命名空间的一部分,它实现了`IList&lt;T&gt;`, `ICollection&lt;T&gt;`, 和 `IEnumerable&lt;T&gt;`接口。下面我们将深入探讨`List&lt;T&gt;`的各种用法。 **1. 创建List&lt;T&gt;对象:** 创建`List&lt;T&gt;...

    IlistToList.rar

    另一方面,`List&lt;T&gt;`也是`System.Collections.Generic`命名空间下的一个类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口。`List&lt;T&gt;`提供了一个在内存中存储元素的动态数组,它的操作更为灵活,支持...

    List数据绑定

    在.NET框架中,`List&lt;T&gt;`是泛型集合类,它是`System.Collections.Generic`命名空间下的一个重要组件,用于存储一组特定类型的对象。这个类实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口,使得它具有...

    CSharp 4.0 .Net Framework V4.0 List《T》类

    List&lt;T&gt; 类是 C# 中用于处理动态数组的一种数据结构,它是 .NET Framework 4.0 的一部分,位于 System.Collections.Generic 命名空间中。这个类实现了多种接口,包括 IList&lt;T&gt;, ICollection&lt;T&gt;, IEnumerable&lt;T&gt;, ...

    C#中List与IList的区别.,C#中List与IList的区别.,C#中List与IList的区别.

    首先,List&lt;T&gt;是一个具体的类,它是.NET框架System.Collections.Generic命名空间的一部分。List&lt;T&gt;提供了一个动态数组的实现,可以方便地添加、删除和查找元素。它不仅实现了IList&lt;T&gt;接口,还实现了ICollection&lt;T&gt;、...

    C#+List+GridControl实现主从表嵌套

    `List&lt;T&gt;`是.NET Framework中`System.Collections.Generic`命名空间下的一个泛型集合类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口。`List&lt;T&gt;`是用于存储强类型对象的动态数组,允许快速的插入和...

    C# List用法详解

    C# List&lt;T&gt;是一种泛型集合类,属于System.Collections.Generic命名空间,实现了IList&lt;T&gt;、ICollection&lt;T&gt;、IEnumerable&lt;T&gt;、IList、ICollection、IEnumerable接口。List&lt;T&gt;类是ArrayList类的泛型等效类,使用大小可...

    数据结构(C#语言描述).rar

    11. **泛型接口与抽象类**:C#中的泛型接口(如IEnumerable&lt;T&gt;)和抽象类(如List&lt;T&gt;的基类IList&lt;T&gt;)为实现各种数据结构提供了统一的访问模式。 12. **LINQ**:Language Integrated Query(语言集成查询)是C#的一...

    c# 4collection

    IEnumerator&lt;T&gt;和IEnumerable&lt;T&gt;接口是C#集合枚举的基础。IEnumerator&lt;T&gt;定义了MoveNext、Current和Reset方法,用于遍历集合。而IEnumerable&lt;T&gt;则提供了GetEnumerator方法,返回一个IEnumerator&lt;T&gt;实例。 8. 链表和...

    c集合的知识点.pdf

    在.NET框架中,集合类分布在不同的命名空间中,如`System.Collections`、`System.Collections.Generic`和`System.Collections.Specialized`。选择合适的集合类型取决于具体需求,例如,如果需要动态调整大小,`...

    Populating a Generic Data List with Generic method

    在.NET框架中,`System.Collections.Generic.List&lt;T&gt;`是数据列表的一种常见实现,它是一个动态大小的数组,可以存储任何类型的对象,只要这些对象共享相同的基类(通常是`System.Object`)或接口。泛型版本的`List&lt;T...

    C#源代码-List泛型集合.zip

    `List&lt;T&gt;`是`System.Collections.Generic`命名空间下的一个类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口,这使得`List&lt;T&gt;`具备了各种强大的功能。 1. 泛型:`List&lt;T&gt;`的核心特性是其泛型性。...

    泛类型转换(实例)

    在.NET中,`IEnumerable&lt;T&gt;`接口是协变的,而`Func&lt;T, TResult&gt;`和`Action&lt;T&gt;`等委托是协变和逆变的。这些特性使得类型转换更加灵活,允许我们在处理不同类型的集合或委托时保持代码的一致性。 以下是一些泛类型...

    VS(C#)中List用法.pdf

    C#中的`List&lt;T&gt;`类是.NET框架中一个非常重要的数据结构,它属于`System.Collections.Generic`命名空间。`List&lt;T&gt;`是一个泛型类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`、`IEnumerable&lt;T&gt;`、`IList`、`ICollection`和...

Global site tag (gtag.js) - Google Analytics