.net - 为什么 Array 类显式地而不是隐式地实现 Ilist 接口(interface)?

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

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

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

编辑

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

最佳答案

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

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

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

    那些可能是合理的:
  • Contains , CopyTo , IndexOf :这些都可以通过隐式接口(interface)实现暴露出来。我不知道为什么他们不是
  • GetEnumerator (来自 IEnumerable )已经通过隐式接口(interface)实现公开。

    关于.net - 为什么 Array 类显式地而不是隐式地实现 Ilist 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9108344/

    相关文章:

    接口(interface)中的 Java 强制转换

    .net - Perfmon、PerfMonitor 和 PerfView

    c# - 无法将两个docker、一个数据库、一个.net core应用程序连接在一起

    php - 如何从字符串中提取多个变量值(PHP)

    在 C 中清除 char 数组

    java - 在接口(interface)中是否有重载方法的替代方法?

    c# - 当我有外键和唯一约束时,如何在 LINQ to SQL 中插入?

    .net - Azure Active Directory API 始终显示禁止消息

    javascript - 在 JavaScript 中使用递归将数组元素移动到不同位置

    java - 你认为 class string 实现的接口(interface)在 Java 中可比吗