为什么IList和ICollection的通用对应物没有相同的方法集?

时间:2011-05-12 19:01:51

标签: c# generics ilist icollection

为什么IListICollection的通用对应物没有相同的方法和属性,是否有特殊原因?他们似乎把它们移动了。

实施例。 IList<T>

int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
T this[int index] { get; set; }

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);
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this[int index] { get; set; }

2 个答案:

答案 0 :(得分:0)

IList<T>实现ICollection<T>,所以至少在IList<T>的上下文中,哪个接口具有什么并不重要。至于为什么,谁知道那个疯狂的.NET团队脑子里发生了什么。但是,“集合”需要添加,删除,检查其内容等方法似乎是合乎逻辑的,因为这些方法不在索引“列表”的上下文中。一旦开始从概念上开始讨论列表,就需要添加索引(需要索引器本身)和索引敏感方法来添加,删除和检查元素。

答案 1 :(得分:0)

我认为主要的设计决策归结为.Net中的数组实际上都隐含地实现了IList<T>IList中的许多方法(例如RemoveClear)不适用于数组,因此会将它们移动到其他接口。