可能重複:
Generic methods and method overloading爲什麼泛型的含糊不一致,而不是提高錯誤?
說我有喜歡
class SortedList<K>
{
public string this[int i] { get { return "a"; /* dummy sample code */ } }
public string this[K key] { get { return "b"; /* dummy sample code */ } }
}
現在一類讓我們說一些傢伙決定使用它:
static string Test1<K>(K key) { return new SortedList<K>()[key]; }
編譯器將此調用解析爲K key
過載。
現在,說
static string Test2(int key) { return new SortedList<int>()[key]; } // whoops
編譯器在哪裏解決了這個給int i
超載對比這一點。
現在,如果一些可憐的靈魂說Test1(0)
,他會得到一個不同的結果,然後如果他說Test2(0)
,即使身體乍看起來幾乎相同。
更有意思的是,在任何情況下,編譯器或運行時都檢測不到並給出錯誤。
相反,運行時只是改變其行爲是否值是通用的,這對於調用者而言可能是顯而易見的。
爲什麼的行爲不一致?
或者,更好的是,爲什麼沒有編譯器(或運行時)錯誤,因爲含糊不清?
@SergRogovtsev:哇,很好找!沒有看到那個;似乎完全回答了這個問題。那麼我們應該投票結束我的問題。 – Mehrdad