2015-05-08 39 views
0

比方說,我有2個簽名的方法:重載了不同數量的數據類型

void Foo(int a); 
void Foo(long a, string s = null); 

如果我調用Foo這樣的:

Foo(1); 

好像叫的第一個二。是否因爲直接作爲參數傳遞的數字默認被視爲int32?這在哪裏指定?

+2

字面值'1' _is_ int。 – stuartd

+0

int32爲默認值 –

回答

3

文字值1單獨默認爲intInt32)。如果你想明確地調用了使用long的版本,請確保您傳遞一個long值,例如:

Foo(1L); 

Servey's answer很好地解釋了爲什麼非常出色。

6

2.4.4.2節(整數常量)的C#5.0規格的規定:

類型文字被確定爲一個整數的如下:

  • 如果文字沒有後綴,它具有第一種可以表示其值的類型:int,uint,long,ulong。
  • 如果文字後綴爲U或u,則它具有第一個可以表示其值的類型:uint,ulong。
  • 如果文字後綴爲L或l,則它具有第一個可以表示值的類型:long,ulong。
  • 如果文字後綴爲UL,UL,UL,UL,LU,Lu,IU或LU,則它是ulong類型。

所以第一子彈適用於你的情況,你有沒有後綴,並1適合在列表中,int的第一個項目,所以文字1的整數int類型。