我相信这个问题是不言自明的。我宁愿把更多的注意力放在例子上来支持问题。
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
public interface ICollection : IEnumerable
{
void CopyTo(Array array, int index);
int Count { get; }
Object SyncRoot { get; }
bool IsSynchronized { get; }
}
public interface IList : ICollection
{
Object this[int index] { get; set; }
int Add(Object value);
bool Contains(Object value);
void Clear();
bool IsReadOnly { get; }
bool IsFixedSize { get; }
int IndexOf(Object value);
void Insert(int index, Object value);
void Remove(Object value);
void RemoveAt(int index);
}
很明显,它IEnumerable
是分开的,只允许循环遍历集合。但我不明白他们为什么保持ICollection
和IList
分开?即使它们是一个,IList 也不会变胖,因为任何集合总是需要这种行为?
我遇到了这篇IEnumerable
文章,它说如果客户端只需要循环项目,ICollection
如果只需要只读访问等等,你的 API 就会返回。
MSFT 为何如此完美地应用 ISP,以至于这些年来从未引起任何问题?
应用 ISP 是基于客户端代码需求的持续过程还是一次性应用程序?如果 ISP 只应用一次,那么我的问题在于帖子标题本身。