作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有这段代码:
class Program
{
static void Main(string[] args)
{
Check(3);
Console.ReadLine();
}
static void Check(int i)
{
Console.WriteLine("I am an int");
}
static void Check(long i)
{
Console.WriteLine("I am a long");
}
static void Check(byte i)
{
Console.WriteLine("I am a byte");
}
}
为什么这段代码打印出“I am an int”而不是“I am a long”?
最佳答案
Why this code prints "I am an int" and not "I am a long" ?
因为编译器遵循 C# 5 规范中的重载决策规则,从第 7.5.3 节开始。
这两个都是适用的函数成员(即它们都对参数列表有效)但是Check(int)
方法比Check(long)
方法(第 7.5.3.2 节),因为参数的类型是 int
,并且恒等式转换比扩大转换“更好”(第 7.5.3.2 节)。 3.3).
Given an implicit conversion C1 that converts from an expression E to a type T1, and an implicit conversion C2 that converts from an expression E to a type T2, C1 is a better conversion than C2 if at least one of the following holds:
- E has a type S and an identity conversion exists from S to T1 but not from S to T2
- ...
这里E
是int
,T1
是int
,T2
是长
。存在从 int
到 int
的标识转换,但不是从 int
到 long
的标识转换...因此适用此规则,并且从int
到int
的转换比从int
到long
的转换要好。
关于C#参数隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662284/
我是一名优秀的程序员,十分优秀!