基本重载示例
此代码包含名为 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)
的方法甚至不被考虑用于重载解析。只保留方法,因此编译器会选择它。