4

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

任何意见和建议将受到高度赞赏。

编辑

为什么我问这个问题?因为现在,数组类的一些有用的成员,比如 index of 正在被强制转换!我想知道如果微软拆分 ilist 界面会更好吗?

4

1 回答 1

6

值得注意的是,您不必隐式或显式地实现整个接口 - 这是逐个成员的决定......而且我对不同的成员有不同的原因。我只是猜测(很少有人可以在这里给出明确的答案)但是:

  • Count:我怀疑Length属性在处理特定数组类型时具有特殊支持(我没有检查过IL)并且效率更高;不向开发人员展示两者更清洁
  • IsFixedSize: 如果你知道你正在处理一个数组,你就知道它的大小是固定的
  • IsReadOnly: 如果你知道你正在处理一个数组,你就知道它是可变的
  • IsSynchronized: 如果你知道你正在处理一个数组,你就知道它不是同步的
  • Item:非通用IList接口将暴露接受/返回的索引器object;特定类型的数组索引器更安全(同样,可能更直接地支持)。中的访问器方法Array为 rank != 1 的数组提供选项。
  • SyncRoot: 从来没有一个SyncRootfor 数组
  • Add, Insert, Remove, RemoveAt, Clear: 你永远不能改变数组的大小,所以这些都不合适

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

那些可能是合理的:

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

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

于 2012-02-02T07:09:01.667 回答