C# C语言中的数组与泛型#

C# C语言中的数组与泛型#,c#,arrays,generics,icollection,C#,Arrays,Generics,Icollection,我注意到数组在c#中实现了ICollection。数组如何实现通用容器接口,而不是通用容器接口本身?我们也可以这样做吗 编辑:我还想知道数组如何不是泛型的,但它接受任何类型并具有类型安全性 public class ListOfStrings : IList<string> { ... } 公共类列表字符串:IList { ... } 这是一个很好的例子,演示了我们可以从泛型创建非泛型(谢谢MarcinJuraszek!!)。此集合将被字符串卡住。我的猜测是,它与字符串的泛型值类

我注意到数组在c#中实现了
ICollection
。数组如何实现通用容器接口,而不是通用容器接口本身?我们也可以这样做吗

编辑:我还想知道数组如何不是泛型的,但它接受任何类型并具有类型安全性

public class ListOfStrings : IList<string>
{
...
}
公共类列表字符串:IList
{
...
}
这是一个很好的例子,演示了我们可以从泛型创建非泛型(谢谢MarcinJuraszek!!)。此集合将被字符串卡住。我的猜测是,它与字符串的泛型值类型声明无关,而是一些我不熟悉的内部连接


再次感谢你

是的,完全有可能。您可以声明如下内容:

public class MyListOfStrings : IList<string>
{
}
公共类MyListOfStrings:IList
{
}
只要您实现了IList所要求的所有属性/方法,一切都会正常工作。正如您所看到的,
MyListOfStrings
不是泛型的

您还应该记住,数组是特殊的类型,它们有一大堆常规用户定义类型所没有的东西。部分内容已在上进行了描述,与您的问题相关的部分如下:

从.NET Framework 2.0开始,
Array
类实现了
System.Collections.Generic.IList
System.Collections.Generic.ICollection
System.Collections.Generic.IEnumerable
通用接口。这些实现在运行时提供给数组,因此,通用接口不会出现在数组类的声明语法中。此外,对于接口成员,没有仅通过将数组强制转换为通用接口类型(显式接口实现)才能访问的参考主题。向其中一个接口强制转换数组时需要注意的关键问题是,添加、插入或删除元素的成员抛出
NotSupportedException


正如你所看到的,
Array
以一种特殊的方式实现了
IList
ICollection
IEnumerable
,而这不是你自己的类型所能做到的。

我不熟悉这里的礼仪。我想澄清我问题中的一些问题,但我不想让人觉得你没有回答我的问题。我只是编辑还是在这里问?这是一个关于数组接受任何类型,但MyListofString只接受字符串的想法的问题。他们是如何使数组非泛型但接受任何类型的?谢谢你的编辑,顺便说一句。请随时用澄清更新你的问题。@RyanWoods一般来说,如果编辑使现有答案无效,最好是在评论中澄清(假设这是一个小改动),或者发布一个新问题。但是要注意,在评论中不断澄清这个问题是被轻视的——在这一点上,可能应该是一个新问题。我是否遗漏了什么,或者array不只是实现了4.6.1中的非通用版本或IList、ICollection等?谢谢你的回答。下次我会先看看MSDN。我会说,我不会像你那样从MSDN中收集到这些信息。你的解释更有道理。在你、马金库拉泽克和罗布之间,我对这个话题有了更好的理解。谢谢。数组已经是泛型的-
int[]
定义了
int
类型的数组。由于它是一种内置类型,我可以想象有一些语法糖本质上是
Array
(注意,
Array
不同于
[]
——这只是一个例子),这是完全有意义的,这将真正帮助我在将来思考这个问题!int[]~数组