什么是关于何时,应该或不应该定义用户定义的隐式转换的一般指导原则?
我的意思是,例如,"隐式转换永远不会丢失信息","隐式转换永远不应该抛出异常",或"隐式转换永远不应该实例化新对象".我很确定第一个是正确的,第三个不是(或者我们只能隐式转换为结构),而我不知道第二个.
Jon*_*eet 14
第一个并不像你想象的那么简单.这是一个例子:
using System;
class Test
{
static void Main()
{
long firstLong = long.MaxValue - 2;
long secondLong = firstLong - 1;
double firstDouble = firstLong;
double secondDouble = secondLong;
// Prints False as expected
Console.WriteLine(firstLong == secondLong);
// Prints True!
Console.WriteLine(firstDouble == secondDouble);
}
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我很少创建自己的隐式转换.我对框架中的那些人感到高兴,但我很少觉得添加自己的东西会让生活更美好.(一般来说,值类型也是如此,顺便说一句.)
编辑:只是为了实际回答这个问题,可能值得阅读微软类库设计指南中的转换运算符部分.