使用不同数字数据类型进行重载

Joh*_*han 0 c#

假设我有一个带有2个签名的方法:

void Foo(int a);
void Foo(long a, string s = null);
Run Code Online (Sandbox Code Playgroud)

如果我这样调用Foo:

Foo(1);
Run Code Online (Sandbox Code Playgroud)

它似乎称为两者中的第一个.是因为默认情况下直接作为参数传递的数字被视为int32吗?这指定在哪里?

Ser*_*rvy 6

C#5.0规范的第2.4.4.2节(整数文字)指出:

整数文字的类型确定如下:

  • 如果文字没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,uint,long,ulong.
  • 如果文字后缀为U或u,则它具有这些类型中的第一个,其值可以表示为:uint,ulong.
  • 如果文字后缀为L或l,则它具有这些类型中的第一个,其值可以表示为:long,ulong.
  • 如果文字后缀为UL,U1,uL,ul,LU,Lu,lU或lu,则为ulong类型.

因此第一个项目符号适用于您的情况,因为您没有后缀,并且1适合列表中的第一项int,因此整数文字1是类型int.