基本過載示例
此程式碼包含名為 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)
的方法甚至不被考慮用於過載解析。只保留方法,因此編譯器會選擇它。