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