为什么Array类明确地实现Ilist接口而不是隐式?

时间:2012-02-02 07:01:30

标签: .net arrays interface explicit-interface explicit-implementation

我的目标语言是带有.net框架的C#。我想知道这个话题背后的意义或原因是什么?

任何建议和建议都会得到高度赞赏。

修改

为什么我问这个问题? 因为现在,Array类的一些有用的成员就像索引一样 演员背后!我想知道如果微软拆分ilist接口会更好吗?

1 个答案:

答案 0 :(得分:6)

值得注意的是,您不必隐式或明确地实现整个界面 - 这是一个逐个成员的决定......我对不同的成员有不同的理由。我只是猜测(很少有人能在这里给出明确的答案)但是:

  • Count:我怀疑当你处理特定的数组类型时,Length属性有特殊的支持(我没有检查过IL)更高效;更清洁的是不向开发者展示
  • IsFixedSize:如果你知道你正在处理一个数组,你知道大小是固定的
  • IsReadOnly:如果你知道你正在处理数组,你知道它是可变的
  • IsSynchronized:如果你知道你正在处理数组,你知道它没有同步
  • Item:非通用IList接口会公开接受/返回object的索引器;特定类型的数组索引器更加类型安全(并且可能更直接地支持)。 Array中的访问器方法为具有rank!= 1的数组提供了选项。
  • SyncRoot:数组
  • 永远不会有SyncRoot
  • AddInsertRemoveRemoveAtClear:您永远无法更改数组的大小,因此这些都不合适

换句话说,如果你已经知道这是一个数组的编译时信息,你已经知道了答案,或者肯定不能使用这些操作 - 或者有更好的方法。

可以合理的那些:

  • ContainsCopyToIndexOf:这些都可以通过隐式接口实现公开。我不知道为什么他们不是

GetEnumerator(来自IEnumerable)已通过隐式接口实现公开。