考虑以下代码:
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
参数。
虽然我可以理解,int
和Int32
都可以容纳long
和Int64
,但我却找不到解释(以求好奇),了解它在引擎盖下的工作原理。
我是否应该接受它才行,还是有人可以提供更多详细信息?
答案 0 :(得分:2)
为此,需要阅读有关语言中方法重载如何工作的规范。当有更多特定的签名匹配方法可用时,它将被调用。在上述情况下,由于Int
可以隐式转换/转换为long
,如果没有占用int
的重载,它将通过调用另一个占用{{1}的重载来结束}作为输入。
例如:
long
也请参考以下文档链接,以查找@Fildor发表在评论中的C#类型之间的隐式转换:
以下文章应有助于理解C#中的重载解析的工作原理
https://csharpindepth.com/articles/Overloading
希望有帮助。