c# – 允许多个系统显式转换器,但不允许多个用户显式转换器.为什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 允许多个系统显式转换器,但不允许多个用户显式转换器.为什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1462字,纯文字阅读大概需要3分钟。
内容图文
![c# – 允许多个系统显式转换器,但不允许多个用户显式转换器.为什么?](/upload/InfoBanner/zyjiaocheng/793/9c0075fe9c7e4d9682878c5901d7befa.jpg)
如果我有这个代码,这将编译并按预期工作:
class MyNumber // Just a class.
{
static public explicit operator MyNumber(byte b)
{
return new MyNumber();
}
}
Decimal d = new Decimal();
MyNumber c1 = (MyNumber)d;
Perhapse有些人有点意外,因为没有从十进制到MyNumber的现有显式转换.但是由于存在从十进制到字节的显式转换,并且还存在从字节到MyNumber的显式转换,编译器非常友好地为我插入了额外的显式转换.
简而言之:如果程序员使用显式转换,编译器可以自由地搜索其他显式转换以使整个过程完成.
所以…我用自己的课程尝试了同样的事情.我使用了MyByte和Mydecimal,而不是字节和小数.代码如下所示:
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# – 允许多个系统显式转换器,但不允许多个用户显式转换器.为什么?全部内容,希望文章能够帮你解决c# – 允许多个系统显式转换器,但不允许多个用户显式转换器.为什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。