关于CollectionBase抽象类,IEnumerable,IEnumerator以及IComparer,IComparable的实现
来源:互联网 发布:淘宝手机查询等级 编辑:程序博客网 时间:2024/05/18 14:26
最近看C#语法,快被这几个东西搞混了,终究没能找到Foreach的实现根本原理,感觉现在这个水平也不需要去深究
首先来讲讲对CollectionBase的了解
这个抽象类实现了ICollection,IList,IEnumerable3个接口,其中有一个innerList,List成员为定制实现数组方式访问集合提供方便
public abstract class CollectionBase : IList, ICollection, IEnumerable
{
// Methods
int IList.Add(object value);
void IList.Remove(object value);
// Properties
protected IList List { get; }
}
可调用内部呈List.Add(),List.Remove()实现Add与Remove方法
public desClass this[int index]
{
get
{
return (desClass)List[index];
}
}
实现数组下标访问的功能
/××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××分割线×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××/
关于IEnumerable接口
只需实现方法IEnumerator GetEnumerator()方法若不定制IEnumerator则使用 yield return 语法返回需要的值(一般为类内的成员变量)
public IEnumerator GetEnumerator()
{
foreach(Class item in CollectionClass)
{
yield return item.desValue;
}
}
若实现IEnumerator接口,则需实现类似C++ Iterator功能
Interface IEnumerator
{
object Current;
public bool MoveNext();
public Reset();
}
那么问题来了为了实现这个接口必须返回一个元素,通过数组下标获取
class IEnumeratorImplement : IEnumerator
{
private List<BaseClass> list=new List<BaseClass>();
private int position=-1;
public object Current
{
get
{ return list[position]; }
}
public IEnumeratorImplement(List<BaseClass> _list)
{
position = -1;
list.AddRange(_list);
}
public bool MoveNext()
{
if (position < list.Count-1)
{
position++;
return true;
}
else
return false;
}
public void Reset()
{
position = -1;
}
}
注意position参数的上下界,可调式程序,若为泛型接口还是先了IDiposable
接下来使用
class CollectionBaseClass
{
List<BaseClass> list=new List<BaseClass>();
public CollectionBaseClass(List<BaseClass> _list)
{
list.AddRange(_list);
}
public IEnumerator GetEnumerator()
{
return new IEnumeratorImplement(this.list);
}
}
此处的举出数据类型可以自行替换,别忘了初始化
/××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××/
IComparable与IComparer接口的实现相对容易些
IComparable接口只需实现
public int CompareTo(object obj)
{
}
注意判断抛出异常
调用Array.sort(CollectionClass);
IComparer接口实现(在比较对象的代码无法改动时实现IComparer接口较方便)
class Comparer:IComparer
{
public int Compare(object obj1,object obj2)
{
}
}
调用Array.Sort(CollectionClass,new Comparer())
由于无法获取foreach的原理,对一些底层的东西还不是很懂,希望有错误或者有补充的给予意见
- 关于CollectionBase抽象类,IEnumerable,IEnumerator以及IComparer,IComparable的实现
- 对IComparable,IComparer,IEnumerable,IEnumerator的理解
- IComparable和IComparer的区别/IEnumerable 和IEnumerator的区别
- 读书笔记:关于foreach,IEnumerable,IEnumerator,CollectionBase
- c# 实现IComparable、IComparer接口、Comparer类的详解
- C#笔记25:比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- IComparable 和IComparer 接口实现数组的自定义排列
- IComparer和IComparable的区别
- IComparer和IComparable的区别
- IComparable<T>, IComparer<T>,IEnumerable<T>泛型接口
- C# IEnumerable和IEnumerator的区别,如何实现
- 一些特别好用的网站
- mac下dashboard小控件开发实例(附源码)
- rehat(linux) 下搭建jdk1.7
- 配置windows 2008 R2远程桌面授权
- 开篇语
- 关于CollectionBase抽象类,IEnumerable,IEnumerator以及IComparer,IComparable的实现
- 20150108 N2
- ContentProvider数据共享
- rac 11g 资源自动启动
- 贪心算法
- NAND FLASH ECC校验原理与实现
- STL入门第二篇——牛刀小试之史前时代转木取火
- Linux I2C子系统分析-I2C设备驱动
- Java 反射调用静态方法