C# 常用接口学习 ICollection<T>
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>的更多相关文章
- C# 常用接口学习 IComparable 和 IComparer
C# 常用接口学习 IComparable 和 IComparer 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 201 ...
- C# 常用接口学习 IEnumerable<T>
作者:乌龙哈里 时间:2015-10-24 平台:Window7 64bit,Visual Studio Community 2015 本文参考: MSDN IEnumerable<T> ...
- JDBC 学习笔记(三)—— JDBC 常用接口和类,JDBC 编程步骤
1. JDBC 常用接口和类 DriverManager 负责管理 JDBC 驱动的服务类,程序中主要的功能是获取连接数据库的 Connection 对象. Connection 代表一个数据库连接对 ...
- 常用接口简析3---IList和List的解析
常用接口的解析(链接) 1.IEnumerable深入解析 2.IEnumerable.IEnumerator接口解析 3.IComparable.IComparable接口解析 学习第一步,先上菜: ...
- Java实战之02Hibernate-01简介、常用接口、CRUD操作
一.Hibernate简介 1.Hibernate在开发中所处的位置 2.ORM映射 Object :面向对象领域的 Relational:关系数据库领域的 Mapping:映射 Object: Re ...
- python之路,Day24 常用设计模式学习
python之路,Day24 常用设计模式学习 本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 ...
- Day5 - Python基础5 常用模块学习
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...
- 【转】Android LCD(二):LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...
- C# - 常用接口
常用接口 用于比较接口 IComparable<T> 接口内部定义了用于比较两个对象大小的CompareTo(T t)方法,>参数时返回1,=参数时返回0,<参数时返回-1.集 ...
随机推荐
- the selected server is enabled,but is not configured properly.Deployment to it will not be permitted
用Tomcat添加部署项目的时候报错: the selected server is enabled,but is not configured properly.Deployment to it w ...
- Fixjs实践——标签、按钮控件
Fixjs介绍 Fixjs是一款javascript界面基础框架,主要为开发复杂组件提供底层的框架支持. Fixjs 0.3.0主要增加了文本显示类fixjs.text.TextField 支持的主要 ...
- Hexo站点之域名配置
摘要 因为Hexo个人博客是托管在github之上,每次访问都要使用githubname.github.io这么一个长串的域名来访问,会显得非常繁琐.这个时候我们可以购买一个域名,设置DNS跳转,以达 ...
- 解决浏览器兼容问题的css hack
原理 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS.CSS Hack大致有3种表现形式,CSS类内部Hack.选择 ...
- PRD学习笔记:一些需要注意的说明
控件说明 1)输入框 若输入框有默认提示,点击输入框,弹出软键盘. 当输入框内不为空(空格除外)时,默认显示消失. 2)软键盘的弹出及退去机制 当输入框内必须输入的为数字时,弹出数字软键盘.其余时候, ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- mysql数据恢复问题
现象 mysql> drop database zabbix; Query OK, 104 rows affected (0.30 sec)mysql> exitBye[root@mysq ...
- grunt--自常用配置文件--js/样式压缩打包,sass工具整合使用
// Project configuration. module.exports = function(grunt) { // 使用严格模式 'use strict'; // 这里定义我们需要的任务 ...
- action中list传到JSP中取不到值的问题
今天遇到了这个问题 action中list传到JSP中取不到值 搞了半天是因为我在JSP中取值的的时候 <s:iterator value="shlist" var=&qu ...
- Texture的渲染及截屏功能
我们今天就简单说下 cocos2d的Texture的简单用法,并将一张大图裁剪成小图并保存起来 我们先准备一张大图,如下: 只看图,表太在意内容啊. 我们的目的就是将这张大图裁剪成一张张的小图并保存下 ...