C#中的数组实现为 System.Array 类的实例,它们只是集合类(Collection Classes)中的一种类型。集合类一般用于处理对象列表,其功能比简单数组要多,功能大多是通过实现 System.Collections 名称空间中的接口而获得的,因此集合的语法已经标准化了。这个名称空间还包含其他一些有趣的东西,例如,以与 System.Array 不同的方式实现这些接口的类。
    集合的功能(包括基本功能,例如[index]语法访问集合中的项)可以通过接口来实现,该接口不仅没有限制我们使用基本集合类,例如 System.Array,相反,我们还可以创建自己的定制集合类。这些集合可以专用于要枚举的对象(即要从中建立集合的对象)。这么做的一个优点是定制的集合类可以是强类型化的。也就是说,从集合中提取项时,不需要把它们转换为正确的类型。另一个优点是提供专用的方法,例如,可以提供获得项子集的快捷方法,在扑克牌示例中,可以添加一个方法,来获得特定花色中的所有 Card 项。

System.Collections 名称空间中的几个接口提供了基本的组合功能:
    a、 IEnumerable 可以迭代集合中的项。
    b、 ICollection(继承于 IEnumerable)可以获取集合中项的个数,并能把项复制到一个简单的数
    组类型中。
    c、 IList(继承于 IEnumerable 和 ICollection)提供了集合的项列表,允许访问这些项,并提供其
    他一些与项列表相关的基本功能。
    d、 IDictionary(继承于 IEnumerable 和 ICollection)类似于 IList,但提供了可通过键值(而不是索
    引)访问的项列表。
    System.Array 类实现 IList、 ICollection 和 IEnumerable,但不支持 IList 的一些更高级的功能,它
    表示大小固定的项列表。

 
自定义集合:
    Animals.cs : 
using System.Collections;  // 集合类
namespace 自定义集合
{
    public class Animals : CollectionBase
    {
        // Add 和 Remove 实现为强类型化的方法
        public void Add(Animals newAnimal)
        {
            List.Add(newAnimal);
        }
        public void Remove(Animals oldAnimal)
        {
            List.Remove(oldAnimal);
        }
        public Animals(){ }
    }
}
    Program.cs : 
        static void Main(string[] args)
        {
            Console.WriteLine("Using custom collection class Animals");
            Animals animalCollection = new Animals();
            animalCollection.Add(new Cow("Sarah")); // Cow类这里并没有实现
        }
 
【索引符】
    索引符(indexer)是一种特殊类型的属性,可以添加到类中。以提供类似于数组的访问
    以上述代码为例
    Animals.cs : 
using System.Collections;  // 集合类
namespace 自定义集合
{
    public class Animals : CollectionBase
    {
        public Animal this[int animalIndex]
        {
            get{
                return (Animal) List[animalIndex];
            }
            set{
                List[animalIndex] = value;
            }
        }
        // Add 和 Remove 实现为强类型化的方法
        public void Add(Animals newAnimal)
        {
            List.Add(newAnimal);
        }
        public void Remove(Animals oldAnimal)
        {
            List.Remove(oldAnimal);
        }
        public Animals(){ }
    }
}
static void Main(string[] args)
{
    Animals animalCollection = new Animals();
    animalCollection.Add(new Cow("Jack"));
    animalCollection.Add(new Chicken("Vera"));
    foreach (Animal myAnimal in animalCollection)
    {
        myAnimal.Feed();
    }
    Console.ReadKey();
}

【迭代器】

using System.Collections;
namespace 迭代器的使用{
    class Program{
        public static IEnumerable SimpleList(){
            yield return "string 1";
            yield return "string 2";
            // yield break; 终止迭代器的执行
            yield return "string 3";
        }
 
        static void Main(string[] args){
            foreach (var item in SimpleList()){
                Console.WriteLine(item);
            }
}}}

【对象比较的接口】
    IComparable 和 IComparer 接口是.NET Framework 中比较对象的标准方式。这两个接口之间的
    差别如下:
            *  IComparable 在要比较的对象的类中实现,可以比较该对象和另一个对象。
            * IComparer 在一个单独的类中实现,可以比较任意两个对象。
         
        
 
【使用IComparable和IComparer接口对集合排序】
    例如ArrayList的sort()方法,不带参数时,代表使用默认的排序参数
 
 

C#基础:集合的更多相关文章

  1. page74-泛型可迭代的基础集合数据类型的API-Bag+Queue+Stack

    [泛型可迭代的基础集合数据类型的API] 背包:就是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素.(用例也可以检查背包是否为空, 或者获取背包中元素的 ...

  2. JAVA基础-集合(二)

    一.Map整体结构体系 Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的.两个键为映射关系,其中第一个键为主键(主键是唯一的不可重复),第二个键为v ...

  3. Java18-java语法基础——集合框架

    Java18-java语法基础——集合框架 一.什么是集合框架 1.集合框架:是为表示和操作集合而规定的一种统一的.标准的体系结构. 2.任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运 ...

  4. Java基础-集合的嵌套

    Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...

  5. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  6. [c#基础]集合foreach的必要条件和自定义集合

    引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...

  7. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  8. 2017-3-2 C#基础 集合

    要使用集合必须先引用命名空间,using System.Collections; 集合与数组的不同: 数组:同一类型,固定长度集合:不同类型,不固定长度 集合主要分为六大类:普通集合,泛型集合,哈希表 ...

  9. C#基础——集合及特殊集合

    集合 集合的基本信息: Systerm.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. Systerm.Collections.Ge ...

  10. Java基础——集合源码解析 List List 接口

    今天我们来学习集合的第一大体系 List. List 是一个接口,定义了一组元素是有序的.可重复的集合. List 继承自 Collection,较之 Collection,List 还添加了以下操作 ...

随机推荐

  1. 内容提供者 DocumentProvider Uri工具类

    Activity /**详见http://blog.csdn.net/coder_pig/article/details/47905881 Calendar Provider:日历提供者,就是针对针对 ...

  2. OD: Format String, SQL Injection, XSS

    Format String 格式化串漏洞 考虑如下的代码: #include<stdio.h> int main() { int a=44,b=77; printf("a=%d, ...

  3. Ubuntu 添加sudo用户

    第一种方法: 添加sudo用户 当你安装Ubuntu的时候,它会自动添加第一个用户到sudo组,允许这个用户通过键入其自身帐户密 码来获得超级用户(root)身份.然而,系统不会再自动添加其他的用户到 ...

  4. SICP 阅读笔记(二)

    Chapter 1: Building Abstractions with Procedures 2015-09-29 016 Preface of this chapter QUOTE: The a ...

  5. linux 各种发行版及包管理器的关系

    linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...

  6. sqlite--代码操作

    1.创建数据库 NSString * docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainM ...

  7. 机器学习理论与实战(十)K均值聚类和二分K均值聚类

    接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...

  8. php模板引擎技术简单实现

    用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化 tpl.class.php主要解析 as ...

  9. iOS开发之多媒体API(1)

    iOS开发之多媒体API(1)       播放视频 视频文件介绍 视频格式可以分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类.尽管后者在播放的稳定性和播放画面质量上可能没 ...

  10. 测试一下PHP官方的新一代PHP加速插件ZendOpcache的性能及配置

    过程不表,都比较顺利 参考如下URL: http://www.lvtao.net/server/ZendOpcache.html 大家知道目前PHP的缓存插件一般有三个:APC.eAccelerato ...