gpt4 book ai didi

c# - 如果有 2 个方法具有相同的签名会发生什么。一种 native 和第二种扩展方法?

转载 作者:行者123 更新时间:2023-11-30 21:04:20 25 4
gpt4 key购买 nike

如果我创建一个与本地方法具有相同签名的扩展方法 (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

List<Label> re = new List<Label>();
re.ForEach(x => Foo(x));

这会编译并运行,但它不会调用我的 EM,而是调用它的本地方法。我确信它不会显示有 2 个重载,因为对于重载,必须对签名进行一些更改

enter image description here

查询
Q1。为什么会这样?
Q2。如果有更多参数,那么我可以更改参数顺序并调用它。但是我如何让他用相同数量的参数调用我的 EM(这是对我的问题的一个非常简单的解释。我的 EM 可能是一个复杂的)?

最佳答案

C# 将始终调用类上的方法而不是调用扩展方法。我建议在方法的名称中添加一些东西来区分它。我个人在最后使用 Ex,因为它很短并且提醒我它是一种扩展方法。

public static class EM
{
public static void ForEachEx<T>(this List<T> enu, Action<T> action)
{
foreach (T item in enu)
action(item);
}
}

关于c# - 如果有 2 个方法具有相同的签名会发生什么。一种 native 和第二种扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com