gpt4 book ai didi

C#参数隐式转换

转载 作者:太空狗 更新时间:2023-10-29 22:15:55 24 4
gpt4 key购买 nike

有这段代码:

    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
  • ...

这里EintT1intT2。存在从 intint 的标识转换,但不是从 intlong 的标识转换...因此适用此规则,并且从intint的转换比从intlong的转换要好。

关于C#参数隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com