ArrayList
声明它实现了IList
,ICollection
和IEnumeralbe
接口。为什么ArrayList实现IList,ICollection,IEnumerable?
为什么不仅实现IList
,因为IList
也从ICollection
导出,ICollection
从IEnumerable
的。
这种声明的目的是什么? .NET BCL中有很多这样的情况。
ArrayList
声明它实现了IList
,ICollection
和IEnumeralbe
接口。为什么ArrayList实现IList,ICollection,IEnumerable?
为什么不仅实现IList
,因为IList
也从ICollection
导出,ICollection
从IEnumerable
的。
这种声明的目的是什么? .NET BCL中有很多这样的情况。
用下面的代码:
interface I1 { }
interface I2 : I1 { }
class Foo: I2 { }
如果通过反射来看看富,你会发现
class Foo: I2, I1 { }
这也是有效的编译,并给出了相同的结果。
所以区别是没有意义的,并且在记录Foo时,你可能会写两个接口。
添加单个或多个项目没有有效的差异。我相信额外的声明是清晰的。
当反射检查,班这在代码实现IList
具有相同的接口声明列表,这在代码申报实现所有的Ilist
,ICollection
和IEnumerable
类。
我不是很肯定ArrayList
有接口的不同实现。考虑下面的代码:
public interface IBase
{
int SomeInt { get; set; }
}
public interface ISub : IBase
{
int SomeOther { get; set; }
}
public class MyClass : ISub
{
public int SomeOther { get; set; }
public int SomeInt { get; set; }
}
MyClass
的类型直接实现仅ISub
接口。但是,如果您编译代码到一个程序,然后添加组件,参考其他项目,打开对象浏览器并检查基本类型为MyClass
,它的特色将是这样的:
Base Types
|- ISub
| |- IBase
|- IBase
|- Object
提问是不是询问他们是什么 - 询问他们为什么明确列出正在实施,当他们已经通过继承IList实施时 – 2009-07-22 12:37:00