构造集合类,可以通过继承CollectionBase,而CollectionBase实现了IList、ICollection、IEnumerable接口。
IEnumerable接口实现了 GetEnumerator()方法,实现了对结果的枚举。
// 摘要: // 公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。 [ComVisible(true)] [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")] public interface IEnumerable { // 摘要: // 返回一个循环访问集合的枚举数。 // // 返回结果: // 可用于循环访问集合的 System.Collections.IEnumerator 对象。 [DispId(-4)] IEnumerator GetEnumerator(); }
ICollection 继承自IEnumerable接口,在些基础上添加了三个属性与一个方法。
int Count { get; } bool IsSynchronized { get; } object SyncRoot { get; } void CopyTo(Array array, int index);
IList接口实现了以上二个接口 又添加了新的属性与方法
int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
object this[int index] { get; set; }
bool IsReadOnly { get; }
bool IsFixedSize { get; }
现在回到CollectionBase类中 ,首先看一下类的定义
public abstract CollectionBase : IList, ICollection, IEnumerable
{
//构造函数
protected CollectionBase();
protected CollectionBase(int capacity);
//属性定义
public int Capacity{get; set;}public int Count{get;}protected ArrayList InnerList{get;}protected IList List{get;}
//方法定义public void Clear();public IEnumerable GetEnumerator();protected virtual void OnClear();protected virtual void OnClearComplete();protected virtual void OnInsert(int index, object value);protected virtual void OnInsertComplete(int inedx, object value);protected virtual void OnRemove(int index, object value);protected virtual void OnRemove(int index, object value, object newValue);protected virtual void OnSet(int index, object oldValue, object newValue);protected virtual void OnSetComplete(int index, object oldValue, object newValue);protected virtual void OnValidate(object value);public void RemoveAt(int index);
}
自定义集合类时可以扩展CollectionBase
public sealed class MyCollection : CollectionBase
{
//这里可以自定义自己的 索引 包含 添加 删除 操作
}