gpt4 book ai didi

c# - 允许使用多个系统显式转换器,但不允许使用多个用户显式转换器。为什么?

转载 作者:太空狗 更新时间:2023-10-30 01:21:10 25 4
gpt4 key购买 nike

如果我有这段代码,它将编译并正常工作:

class MyNumber // Just a class.
{
static public explicit operator MyNumber(byte b)
{
return new MyNumber();
}
}

Decimal d = new Decimal();
MyNumber c1 = (MyNumber)d;

也许有些人有点惊讶,因为没有现成的从 decimalMyNumber 的显式转换。但是因为有从 decimalbyte 的显式转换,还有从 byteMyNumber 的显式转换>,编译器非常友好地为我插入了额外的显式转换。

简而言之:如果程序员使用显式转换,编译器可以自由搜索其他显式转换以使整个过程顺利进行。

所以...我在自己的类(class)中尝试了同样的事情。我没有使用 bytedecimal,而是使用了 MyByteMydecimal。代码如下所示:

class MyDecimal // Simulates a decimal.
{
static public explicit operator MyByte(MyDecimal a) // Just like in a decimal.
{
return new MyByte();
}
}

class MyByte // Simulates a byte.
{
}

class MyNumber // Just a class.
{
static public explicit operator MyNumber(MyByte b)
{
return new MyNumber();
}
}

MyDecimal d = new MyDecimal();
MyNumber c2 = (MyNumber)d; // <== Will not compile!

最后一行不会编译。它给出错误:“无法将类型‘DoubleExplicitCasts.Program.MyDecimal’转换为‘DoubleExplicitCasts.Program.MyNumber’”。好吧……为什么不呢???

所以我的问题是:为什么 .NET 系统中的显式运算符得到特殊处理,而我的用户显式运算符却没有?

编辑
我知道这段代码不起作用,并且值不会从一个实例转移到另一个实例,但这不是重点。

最佳答案

IMO,这将导致“愉快的调试”和非常非常复杂且不明显的代码。

想象一下 3 个或更多级别的此类用户定义的转换,以及您将如何搜索由中间转换引起的错误(例如,此类转换是错误引入的或不应在那种情况下使用)。

谢天谢地,不支持这种行为。

关于c# - 允许使用多个系统显式转换器,但不允许使用多个用户显式转换器。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482570/

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