基本重载示例

此代码包含名为 Hello 的重载方法 :

class Example
{
    public static void Hello(int arg)
    {
        Console.WriteLine("int");
    }
 
    public static void Hello(double arg)
    {
        Console.WriteLine("double");
    }
 
    public static void Main(string[] args) 
    {
        Hello(0);
        Hello(0.0);
    }
}

主要方法被调用,它将打印

int
double

在编译时,当编译器找到方法调用 Hello(0) 时,它会找到名为 Hello 的所有方法。在这种情况下,它会找到其中两个。然后它尝试确定哪种方法更好。确定哪种方法更好的算法很复杂,但通常归结为尽可能少地进行隐式转换

因此,在 Hello(0) 的情况下,方法 Hello(int) 不需要转换,但方法 Hello(double) 需要隐式数值转换。因此,第一种方法由编译器选择。

Hello(0.0) 的情况下,无法隐式地将 0.0 转换为 int,因此 Hello(int) 的方法甚至不被考虑用于重载解析。只保留方法,因此编译器会选择它。