如果我使用本機方法創建具有相同簽名的擴展方法(EM),會發生什麼情況。如果有兩種方法具有相同的簽名,會發生什麼情況。一種本地和二次擴展方法?
我的情況
我創建了一個擴展方法
public static class EM
{
public static void ForEach<T>(this List<T> enu, Action<T> action)
{
foreach (T item in enu)
action(item);
}
}
現在,因爲名單也有相同的簽名功能
public void ForEach(Action<T> action);
所以名單我也
List<Label> re = new List<Label>();
re.ForEach(x => Foo(x));
這編譯和運行,但它不會調用我的EM,而是調用其本地方法。我相信,它不會顯示有2個重載,因爲超載,必須有在signtaure
查詢
Q1一些變化。這是爲什麼發生?
Q2。如果有更多的參數,那麼我可以改變參數順序並調用它。但是,我怎麼讓他用相同數量的參數呼叫我的EM(這是我的問題的一個非常簡單的解釋,我的EM可能是一個複雜的問題)?
'IEnumerable的
@leppie:你的答案適用於'IEnumerable'。但現在問題已經改變。現在該方法需要'此列表' –
我認爲這是對這個問題的一個有趣的補充。 http://stackoverflow.com/questions/4655209/how-to-hide-a-member-method-by-an-extension-method – Carth