我的目标语言是带有 .net 框架的 C#。我想知道这个话题背后的意义或原因是什么?
任何意见和建议将受到高度赞赏。
编辑
为什么我问这个问题?因为现在,数组类的一些有用的成员,比如 index of 正在被强制转换!我想知道如果微软拆分 ilist 界面会更好吗?
我的目标语言是带有 .net 框架的 C#。我想知道这个话题背后的意义或原因是什么?
任何意见和建议将受到高度赞赏。
编辑
为什么我问这个问题?因为现在,数组类的一些有用的成员,比如 index of 正在被强制转换!我想知道如果微软拆分 ilist 界面会更好吗?
值得注意的是,您不必隐式或显式地实现整个接口 - 这是逐个成员的决定......而且我对不同的成员有不同的原因。我只是猜测(很少有人可以在这里给出明确的答案)但是:
Count
:我怀疑该Length
属性在处理特定数组类型时具有特殊支持(我没有检查过IL)并且效率更高;不向开发人员展示两者更清洁IsFixedSize
: 如果你知道你正在处理一个数组,你就知道它的大小是固定的IsReadOnly
: 如果你知道你正在处理一个数组,你就知道它是可变的IsSynchronized
: 如果你知道你正在处理一个数组,你就知道它不是同步的Item
:非通用IList
接口将暴露接受/返回的索引器object
;特定类型的数组索引器更安全(同样,可能更直接地支持)。中的访问器方法Array
为 rank != 1 的数组提供选项。SyncRoot
: 从来没有一个SyncRoot
for 数组Add
, Insert
, Remove
, RemoveAt
, Clear
: 你永远不能改变数组的大小,所以这些都不合适换句话说,如果您已经知道这是一个数组的编译时信息,那么您要么已经知道答案,要么肯定不能使用这些操作——或者有更好的方法来做。
那些可能是合理的:
Contains
, CopyTo
, IndexOf
: 这些都可以通过隐式接口实现公开。我不知道他们为什么不GetEnumerator
(from IEnumerable
) 已经通过隐式接口实现公开。