方法上的长数据类型接受一个int

时间:2019-05-24 10:32:10

标签: c# types int long-integer

考虑以下代码:

static void Main()
{
    int input = 10;

    Console.WriteLine(GetResult(input));
}

static string GetResult(long input)
{
    return (input).ToString();
}

static string GetResult(int input)
{
    return (input).ToString();
}

按现状,Main()方法中的代码将调用第二个GetResult(),后者接受一个int参数。如果删除第二种方法,它将自动使用第一种方法,该方法接受一个long参数。

虽然我可以理解,intInt32都可以容纳longInt64,但我却找不到解释(以求好奇),了解它在引擎盖下的工作原理。

我是否应该接受它才行,还是有人可以提供更多详细信息?

1 个答案:

答案 0 :(得分:2)

为此,需要阅读有关语言中方法重载如何工作的规范。当有更多特定的签名匹配方法可用时,它将被调用。在上述情况下,由于Int可以隐式转换/转换为long,如果没有占用int的重载,它将通过调用另一个占用{{1}的重载来结束}作为输入。

例如:

long

也请参考以下文档链接,以查找@Fildor发表在评论中的C#类型之间的隐式转换:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/implicit-numeric-conversions-table

以下文章应有助于理解C#中的重载解析的工作原理

https://csharpindepth.com/articles/Overloading

希望有帮助。