【发布时间】:2011-10-26 15:19:03
【问题描述】:
我最近决定刷新关于 C# 基础的记忆,所以这可能是微不足道的,但我遇到了以下问题:
StringCollection 在 .NET v1.0 中用于为字符串创建强类型集合,而不是基于 object 的 ArrayList(后来通过包含通用集合进行了增强):
快速浏览StringCollection的定义,可以看到以下内容:
// Summary:
// Represents a collection of strings.
[Serializable]
public class StringCollection : IList, ICollection, IEnumerable
{
...
public int Add(string value);
...
}
您可以看到它实现了IList,其中包含以下声明(以及其他一些声明):
int Add(object value);
但不是:
int Add(string value);
我的第一个假设是,由于 .NET 框架协方差规则,这是可能的。
所以为了确保,我尝试编写自己的类来实现 IList 并进行了更改
int Add(object value);
检索字符串类型而不是对象类型,但令我惊讶的是,在尝试编译项目时,我得到了一个编译时错误:
does not implement interface member 'System.Collections.IList.Add(object)'
任何想法是什么原因造成的?
谢谢!
【问题讨论】:
标签: c# .net inheritance interface covariance