为什么IList
和ICollection
的通用对应物没有相同的方法和属性,是否有特殊原因?他们似乎把它们移动了。
实施例。
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; }
答案 0 :(得分:0)
IList<T>
实现ICollection<T>
,所以至少在IList<T>
的上下文中,哪个接口具有什么并不重要。至于为什么,谁知道那个疯狂的.NET团队脑子里发生了什么。但是,“集合”需要添加,删除,检查其内容等方法似乎是合乎逻辑的,因为这些方法不在索引“列表”的上下文中。一旦开始从概念上开始讨论列表,就需要添加索引(需要索引器本身)和索引敏感方法来添加,删除和检查元素。
答案 1 :(得分:0)
我认为主要的设计决策归结为.Net中的数组实际上都隐含地实现了IList<T>
。 IList
中的许多方法(例如Remove
和Clear
)不适用于数组,因此会将它们移动到其他接口。