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