我最近決定將刷新我的關於C#基礎知識記憶,所以這可能是微不足道的,但我已經碰到了以下問題:C#協變和逆變實施時接口
StringCollection
在.NET V1使用2.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)'
任何想法是什麼原因造成的?
謝謝!
所以我應該記住,作爲一個經驗法則,顯式實現的接口不會顯示在.NET庫的內置類定義中? (因爲我顯然無法在StringCollection類的所有方法中看到此實現) 任何原因爲什麼? –
一般來說,實際上類似於會員投影 - 我修改了迴應來解決這個問題。 – drf