我有兩個通用委託,我試圖定義編譯器抱怨他們是重複的,但在我看來是完全不同的。我在做什麼/理解錯誤?泛型委託重複定義 - 爲什麼?
delegate TReturn foo<TParameter, out TReturn>(TParameter parameter, IItem item);
和
delegate TReturn foo<TParameter, out TReturn>(TParameter parameter, int field, IItem item);
如果我添加一個新的泛型參數到第二委託,一切正常。
delegate TReturn foo<TParameter, TField, out TReturn>(TParameter parameter, TField field, IItem item) where TField struct
但這看起來不正確。我將永遠爲場傳遞一個int - 它不應該是一個通用的。
什麼是確切的編譯錯誤? – Steven
錯誤是「命名空間'xxx'已經包含'foo'」的定義。這種說法有道理,但我無法真正解釋它。 – Rawling
我想你可以通過在這裏刪除泛型來簡化問題。假設你有兩個委託:'delegate void f()'和'delegate void f(int)',然後你得到一個委託對象:'fa;',你不知道從哪個委託的版本對象被實例化。調用'a(1)'的'a()'是不安全的,因爲你不知道委託對象是否實際上代表了一個0或1參數的方法。因此,委託不像可以重載的方法 – weidi