c#参数隐式转换
本文关键字:转换 参数 | 更新日期: 2023-09-27 18:05:04
使用以下代码:
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" ?
为什么这段代码打印&;I am an int&;而不是"我是一个长";
?
因为编译器通过c# 5规范中的重载解析规则,从第7.5.3节开始。
这两个都是适用的函数成员(即它们都对参数列表有效),但Check(int)
方法"更好";比Check(long)
方法(第7.5.3.2节)要好,因为实参的类型是int
,并且单位转换"更好"。
给定将表达式E转换为T1类型的隐式转换C1和将表达式E转换为T2类型的隐式转换C2,如果至少满足下列条件之一,则C1是比C2更好的转换:
- E具有S类型,并且存在从S到T1的身份转换,但不存在从S到T2的身份转换
- …
这里E
为int
, T1
为int
, T2
为long
。从int
到int
有身份转换,但不是从int
到long
…因此,该规则适用,并且从int
到int
的转换比从int
到long
的转换更好。