2015-09-03 29 views
1

在.net中時,我爲參數float,double和decimal的「Add」創建了三個重載函數。爲什麼它總是叫雙重而不是別人?我只是想了解優先的原因。重載函數,參數double被稱爲浮點數或小數點

public Form1() 
{ 
    var g = Add(4.5, 5.6); 
} 

public object Add(float a, float b) 
{ 
     return a + b; 
} 

public object Add(double a, double b) 
{ 
     return a + b; 
} 

public object Add(decimal a, decimal b) 
{ 
    return a + b; 
} 

回答

3

由於4.55.6double是文字,則呼叫被綁定到雙參數的過載。

要調用超載與浮動參數:

var g = Add(4.5f, 5.6f); 

要調用過載與十進制參數:

var g = Add(4.5m, 5.6m); 
+0

我覺得這麼愚蠢不帶小數點和浮動不是想它。謝謝:) – Waqas

+0

現在,當使用整數('1)'文字,長文本('1L')時會發生什麼? :} – user2864740

+0

@ user2864740編譯器將選擇帶有參數類型的重載,您的整數可以隱式轉換爲重載,但您可能會在OPs示例中使用'1'獲得模糊的調用錯誤,因爲多重過載將適合該賬單。 –