小编Dan*_*nko的帖子

C#方法重载分辨率和用户定义的隐式转换

在存在用户定义的隐式转换和转换优先级的情况下,我尝试查找有关方法重载解析的一些信息.

这段代码:

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 …

c# implicit-conversion .net-4.6.1

9
推荐指数
1
解决办法
208
查看次数

标签 统计

.net-4.6.1 ×1

c# ×1

implicit-conversion ×1