C# System.Array真的实现了ICollection吗?

C# System.Array真的实现了ICollection吗?,c#,arrays,icollection,C#,Arrays,Icollection,根据,System.Array实现ICollection,但System.Array不提供Count属性(当然,您可以始终使用LINQ Count()扩展方法,但没有具有此名称的属性)。这怎么可能?不需要计数吗?是这样的: 您可以从以下文档中了解有关上显式接口实现的更多信息。: “从.NET Framework 2.0开始,Array类实现System.Collections.Generic.IList、System.Collections.Generic.ICollection和System.

根据,System.Array实现ICollection,但System.Array不提供Count属性(当然,您可以始终使用LINQ Count()扩展方法,但没有具有此名称的属性)。这怎么可能?不需要计数吗?

是这样的:


您可以从以下文档中了解有关上显式接口实现的更多信息。

“从.NET Framework 2.0开始,Array类实现System.Collections.Generic.IList、System.Collections.Generic.ICollection和System.Collections.Generic.IEnumerable通用接口。这些实现在运行时提供给阵列,因此对于文档构建工具不可见。因此,泛型接口不会出现在数组类的声明语法中,并且没有接口成员的引用主题,这些主题只能通过将数组强制转换为泛型接口类型(显式接口实现)来访问。当您将数组强制转换到这些接口之一时,需要注意的一点是,添加、插入或删除元素的成员抛出NotSupportedException。”

From

此成员是显式接口成员实现。它可以 仅当数组实例被强制转换为 T:System.Collections.ICollection接口


是的,这里是您的
Count
属性:为什么显式实现它而不是隐式实现它是框架设计人员的一个问题
((ICollection)数组)。Count
是的,例如,您可以调用
Add
(在
ICollection
中定义)在数组上,得到一个异常。@MattBurland由于DRY而显式实现。
array
已经有了
Length
,显式
Count
只返回该接口的
Length
。在同一个类上做同样的事情是愚蠢的。@DavidHaney:可能是真的。虽然这比掩盖他们在重复自己的事实要枯燥得多。但我现在看到的问题并不是一般性的。请从速阅读这个问题。
int ICollection.Count
{
    get
    {
        return Length;
    }
}