C# 常用接口学习 ICollection<T>

作者:乌龙哈里
时间:2015-11-01
平台:Window7 64bit,Visual Studio Community 2015

参考:

章节:

  • 接口 ICollection<T> 实现

正文:

我们先来看看 ICollection<T>的源代码:

public interface ICollection<T> : IEnumerable<T>
{
int Count { get; }
bool IsReadOnly { get; } void Add(T item);
void Clear();
bool Contains(T item);
void CopyTo(T[] array, int arrayIndex);
bool Remove(T item);
}

看着这些接口方法,觉得 ICollection<T> 接口比 IEnumerable<T> 多了好多东西,如果我们只是要简单的 foreach,只要实现 IEnumerable<T>接口就够了。但如果我们还要了解元素的数量、增加删除元素等,那只好实现ICollection<T> 接口了。

   class Fruit
{
public string Name;
public int Price;
}

假设我们有个 Box 类是上面这个 Fruit 类的集合,首先我们要在 Box 类中放一个 List<T> 容器来放置元素,然后再在 Box 类上实现 ICollection<T> 接口。

    class Box : ICollection<Fruit>
{
public List<Fruit> _fruit = new List<Fruit>();
public int Count
{
get {return _fruit.Count();}
}
public bool IsReadOnly
{
get {return false;}
}
public void Add(Fruit item)
{
_fruit.Add(item);
} public void Clear()
{
_fruit.Clear();
} public bool Contains(Fruit item)
{
return _fruit.Contains(item);
} public void CopyTo(Fruit[] array, int arrayIndex)
{
_fruit.CopyTo(array,arrayIndex);
} IEnumerator IEnumerable.GetEnumerator()
{
foreach(var f in _fruit) yield return f;
} public IEnumerator<Fruit> GetEnumerator()
{
foreach (var f in _fruit) yield return f;
} public bool Remove(Fruit item)
{
return _fruit.Remove(item);
}
}

一大坨方法要让我们填空。其实我感觉都是在 List<T> 上套了一个包装,实质上的实现都是要靠 List<T>。
(这里真的要感谢伟大的 Visual Studio IDE 帮我们罗列了那么多接口的填空,要不然真的会遗漏的。)。把空填完后,把所有方法都加个 public ,一个新鲜热辣的符合 ICollection<T> 约定的类就出炉了。下来我们调用:

static void Main(string[] args)
{
Box box = new Box();
box.Add(new Fruit { Name = "apple", Price = });
box.Add(new Fruit { Name = "orange", Price = });
box.Add(new Fruit { Name = "grape", Price = });
box.Add(new Fruit { Name = "banana", Price = });
foreach (var b in box) Console.WriteLine($"{b.Name} {b.Price }"); Console.WriteLine($"元素个数:{box.Count}"); Fruit fruit = new Fruit { Name="meloon",Price=};
box.Add(fruit); Console.WriteLine(box.Contains(fruit));
Console.WriteLine($"元素个数:{box.Count}");
Console.WriteLine(box.Remove(fruit));
Console.WriteLine($"元素个数:{box.Count}");
Console.ReadKey();
} //输出显示:
apple
orange
grape
banana
元素个数:
True
元素个数:
True
元素个数:

那个参考三关于几个接口的用处说得很详细,要牢牢记住。
不过我认为 C# 还是设计得太高端了,我们自己实现这些感觉都是在系统给的类型上包裹一下,不过话说回来也是很方便和放心。等以后功力深厚了再去研究系统给的那几个类型。

本文结束。再次感谢现阶段宇宙最完美的C#语言的IDE Visual Studio,该我们这些初学者带来许多便利。

C# 常用接口学习 ICollection<T>的更多相关文章

  1. C# 常用接口学习 IComparable 和 IComparer

    C# 常用接口学习 IComparable 和 IComparer 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 201 ...

  2. C# 常用接口学习 IEnumerable<T>

    作者:乌龙哈里 时间:2015-10-24 平台:Window7 64bit,Visual Studio Community 2015 本文参考: MSDN IEnumerable<T> ...

  3. JDBC 学习笔记(三)—— JDBC 常用接口和类,JDBC 编程步骤

    1. JDBC 常用接口和类 DriverManager 负责管理 JDBC 驱动的服务类,程序中主要的功能是获取连接数据库的 Connection 对象. Connection 代表一个数据库连接对 ...

  4. 常用接口简析3---IList和List的解析

    常用接口的解析(链接) 1.IEnumerable深入解析 2.IEnumerable.IEnumerator接口解析 3.IComparable.IComparable接口解析 学习第一步,先上菜: ...

  5. Java实战之02Hibernate-01简介、常用接口、CRUD操作

    一.Hibernate简介 1.Hibernate在开发中所处的位置 2.ORM映射 Object :面向对象领域的 Relational:关系数据库领域的 Mapping:映射 Object: Re ...

  6. python之路,Day24 常用设计模式学习

    python之路,Day24 常用设计模式学习   本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 ...

  7. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  8. 【转】Android LCD(二):LCD常用接口原理篇

    关键词:android LCD TFT TTL(RGB)  LVDS  EDP MIPI  TTL-LVDS  TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...

  9. C# - 常用接口

    常用接口 用于比较接口 IComparable<T> 接口内部定义了用于比较两个对象大小的CompareTo(T t)方法,>参数时返回1,=参数时返回0,<参数时返回-1.集 ...

随机推荐

  1. 10169 - Urn-ball Probabilities !

    描述:有两个罐子,一个罐子里有一个红球,另一个罐子里有一个红球和一个白球,每次从两个罐子里各取一个球,然后在向每个罐子里各加一个白球,一次取到两个红球时就结束取球,求n次取球中至少一次为取球为红球的概 ...

  2. 让C#、VB.NET实现复杂的二进制操作

    VB.NET和C#属于高级语言,对二进制位操作的支持不是很好,比如没有了移位运算等,用的时候确实很不方便,所以在闲暇之余我重新封装了一个用于C#.VB.NET的位操作类库,通过该类库可以实现数据移位. ...

  3. computer专业术语总结

    计算机专业真可谓是博大精深,光语言就有N多种,而且各种算法计数,各个领域,加之新技术的不断出现, 如果想要穷尽 计算机的知识,那绝对是不那个可能的,只能在若干领域才能取得一定的成果,但是多了解一些专业 ...

  4. 关于在freemarker模板中遍历数据模型List<JavaBean>的经验

    本文采用简单的servlet作为后台处理数据的工具,前台使用freemarker的ftl模板作为输出工具,简单说明怎样将封装有实体类对象的List集合注入到ftl模板中并且成功的在遍历显示出来,之前在 ...

  5. OC之类与对象

    1.面向过程与面向对象. 1). 完成需求1 将大象放进冰箱. a. 把冰箱门打开. b. 把大象放进去. c. 把冰箱门关上. 这是面向过程的思路. 找1个冰箱,要求这个冰箱可以自己开门,自己把大象 ...

  6. java基础(一)对象

    对象的创建 Test test = new Test(); Test test = new Test("a"); 其实,对象被创建出来时,对象就是一个对象的引用,这个引用在内存中为 ...

  7. C#开发学习——SqlHelper的应用

    使用App.config配置文件封装连接字符串,方便重复使用--->添加App.conifg配置文件--->Add : ConnectionString:--->添加引用 <? ...

  8. jquery开头

    jQuery(function(){});jQuery().ready(function(){}); 绑定点击事件: jQuery('#temp').click(function() {}); $(d ...

  9. CodeForces 749D Leaving Auction

    二分查找,$set$. 对于某一次询问,如果把人删光了,那么输出$0$ $0$. 如果只剩下$1$个人,那么输出那个人喊的最低价格. 如果剩下的人数有大于等于两个, 这时最底下出现的情景必然是红色部分 ...

  10. open live writer下载安装

    以前记笔记都是用Evernote,啥都记在上面.除了学习工作的以外,还有各种账号密码啦(这个真心有必要,再也不用各种试了),妈妈要我帮她下载的广场舞名字啦,我双十一要剁手的东西啦等等.很好用的,推荐! ...