关于何时可以、应该或不应该定义用户定义的隐式转换的一般准则是什么?
我的意思是,例如,“隐式转换不应丢失信息”、“隐式转换不应抛出异常”或“隐式转换不应实例化新对象”。我很确定第一个是正确的,第三个不是(或者我们只能隐式转换为结构),我不知道第二个。
最佳答案
第一个并不像你想象的那么简单。下面是一个例子:
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);
}
}
我个人很少创建自己的隐式转换。我对框架中的那些很满意,但我很少觉得添加我自己的会让生活变得更好。 (顺便说一句,一般来说,值类型也是如此。)
编辑:只是为了实际回答这个问题,可能值得阅读 conversion operators part of the Microsoft class library design guidelines 。
关于c# - .Net 隐式转换指南,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/390108/