gpt4 book ai didi

C# 方法重载解析和用户定义的隐式转换

转载 作者:太空狗 更新时间:2023-10-29 17:56:48 25 4
gpt4 key购买 nike

我试图在存在用户定义的隐式转换和转换优先级的情况下找到有关方法重载解决方案的一些信息。

这段代码:

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)

最佳答案

在这种情况下,int 之间的转换-> double优先级较低,因为 int 之间的用户定义隐式转换-> Value存在。

参见:User-defined operator implementations always take precedence over predefined operator implementations .

关于C# 方法重载解析和用户定义的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263112/

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