我尝试查找有关存在用户定义的隐式类型转换以及转换优先级的情况下,方法重载解析的信息。
以下代码:
class Value
{
private readonly int _value;
public Value(int val)
{
_value = val;
}
public static implicit operator int(Value value)
{
return value._value;
}
public static implicit operator Value(int value)
{
return new Value(value);
}
}
class Program
{
static void ProcessValue(double value)
{
Console.WriteLine("Process double");
}
static void ProcessValue(Value value)
{
Console.WriteLine("Process Value");
}
static void Main(string[] args)
{
ProcessValue(new Value(10));
ProcessValue(10);
Console.ReadLine();
}
}
产生输出:
Process Value
Process Value
看起来编译器选择了用户定义的转换而不是从int到double的内置隐式转换(由于这个页面 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/implicit-numeric-conversions-table 上的信息,内置转换是隐式的)。
我试图在规范中找到关于这方面的内容,但没有成功。
为什么编译器选择了 ProcessValue(Value value)
而不是 ProcessValue(double value)
?