c# – 为什么ICollection不包含Add方法?
在标题中,有人知道为什么ICollection接口不包含Add方法吗?通用版本ICollection< T>有一个Add但ICollection没有,这似乎很奇怪.任何对此有深入了解的人都会非常有帮助.
至于为什么我关心 – 遗憾的是构建SharePoint的开发人员从未学过泛型,因此API中的每个集合都是基于ICollection的非泛型集合.我想在ICollection中添加几个扩展方法,其中包括添加到集合中,但这似乎是不可能的(至少在没有反射的情况下是不可能的). 编辑: 相当多的人推测原因是因为ICollection.Add需要一个Object,因此不会是类型安全的.事实并非如此. IList有一个带有Object的Add方法.你只需要在一个带Object的方法中进行类型检查和强制转换. 数组实现ICollection并且因此它不能具有Add的参数也不成立.如果ICollection有一个Add方法,它只需要在数组上显式实现并抛出一个Exception(正如数组当前实现的许多方法一样). 我真的希望有人提到一位设计师的解释. 解决方法
对我而言,界面的命名似乎令人沮丧. ICollection和ICollection< T>甚至不在同一个继承链中 – 大多数集合只是简单地实现两者.
文档说明了接口的作用,因此单独考虑这一点,人们不会期望Add存在:
我怎么想?我个人认为它是直接命名的gaff或第二次(当引入通用接口时)设计者选择将Add添加到ICollection< T>中了.因为这次需要它更常见. IList具有Add并继承ICollection,而IList< T>没有添加并继承ICollection< T>,其为Add. 将其归结为类型层次结构设计的演化/成熟. 至于扩展方法,你可以这样做: public static void AnotherMethod<T>(this ICollection<T> collection,T item) { } 并使用它: ICollection<string> s; s.AnotherMethod(""); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |