功能重载

San*_*nju 11 .net c#

让我们假设我定义了以下三种方法:

int F1(int, int);
int F1(float, float);
Float F1(int, int);
Run Code Online (Sandbox Code Playgroud)

我在这里叫方法F1:

Console.writeline(F1(5,6).ToString()));
Run Code Online (Sandbox Code Playgroud)

它会调用哪种方法,为什么?

Ode*_*ded 22

第一个和第三个函数不会在同一个命名空间中编译.

这是因为函数签名根据参数的类型和数量来区分,并且它们是相同的.返回类型不被视为方法签名的一部分.

如果你只在名称空间中有第一个和第二个(或第二个和第三个),那么将调用最合适的一个(传入整数类型的那个,因为你传入的是整数).

Eric Lippert有一些很棒的博客文章,关于C#的微妙之处.