1
我有收藏類MyCollection<T>
。重載收藏上的物品
我實施了T this[string name]
,它工作正常。
我試過,也能實現T Item(string name)
但當然,給了一個錯誤:
The type
MyCollection<T>
already contains a definition for Item
,因爲它應該。但是我也想通過實現函數T Item(string, bool)
來重載Item,但是這也會引發同樣的錯誤。
爲什麼編譯器會認爲T Item(string, bool)
與索引器T Item(string)
發生衝突?如果它不是一個索引器,而只是一個普通的方法,這兩個聲明將是兩個完全有效的重載。
有趣的是,爲什麼使用索引器和使用普通方法的聲明是不可能的。畢竟,編譯後你會有兩種完全不同的方法sig。據我所知,IL在命名上的限制性更小,例如,它允許2種方法僅通過返回類型(這在C#中是非法的)有所不同。那麼,爲什麼這是不可能的,如果它可以在IL中完成,而在C#中它是非法的?我可能會自己檢查後者。 –
@Ravadre:目前還不清楚你是在猜測OP是做什麼的,或者是其他經驗。如果這是真實的體驗,那麼可能值得作爲一個單獨的問題來詢問。 –
我指的是OP後,但C#實際上不允許做的是聲明索引器,如果你有Item方法,任何Item方法(也有不同的簽名)。嚴格來說,最終的OP問題是:「爲什麼編譯器會認爲T Item(string,bool)與索引器T Item(string)衝突?」你的回答雖然完全有效(+1)並不回答這個問題,我認爲這個問題很有意思,而且OP問到了。 –