在存在用户定义的隐式转换和转换优先级的情况下,我尝试查找有关方法重载解析的一些信息.
这段代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
产生输出:
Process Value
Process Value
Run Code Online (Sandbox Code Playgroud)
因此,看起来编译器选择了用户定义的转换,而不是从int到double的内置隐式转换(内置转换是隐含的,因为来自此页面的信息https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/implicit-numeric-conversions-table).
我试图在规范中找到一些相关的东西,但没有成功.
为什么选择编译器ProcessValue(Value …