如果我创建一个与本机方法具有相同签名的扩展方法 (EM),会发生什么。
我的场景
我创建了一个扩展方法
public static class EM
{
public static void ForEach<T>(this List<T> enu, Action<T> action)
{
foreach (T item in enu)
action(item);
}
}
现在由于 List 也有一个具有相同签名的函数
public void ForEach(Action<T> action);
所以对于列表我做了
List<Label> re = new List<Label>();
re.ForEach(x => Foo(x));
这会编译并运行,但它不会调用我的 EM,而是调用它的本机方法。我相信它不会显示有 2 个重载,因为对于重载,signtaure 必须有一些变化
查询
Q1。为什么会这样?
Q2。如果有更多参数,那么我可以更改参数顺序并调用它。但是我如何让他用相同数量的参数调用我的 EM(这是对我的问题的一个非常简单的解释。我的 EM 可能是一个复杂的问题)?