转换操作符用来把一个对象从一种类型转换到另外一种类型。转换操作符可以是隐式的也可以是明确的。隐式的转换操作符不需要在源代码中指定一个类型转换来完成转换任务。而明确的转换操作符则需要在源代码中呈现一个类型转换来完成转换任务。
下列签名说明了 Point 类用来在 Point 和 Size 之间进行转换的明确的转换操作符。
public static Size op_Explicit( Point p );
如果这种转换不是被终端用户所明确期待的,不要提供一个转换操作符。
理想地,对于消费者的数据调查应该存在一个转换操作符的定义支持。另外,操作符的定义支持也能够以需要进行这种转换的一个或多个相似类型的范例形式而出现。
不要在类型的域空间之外定义转换操作符。
例如,Int32、Double,以及 Decimal 都是数字类型,而 DateTime 则不是。那么把一个 Double 类型转换到一个 DateTime 类型的操作就不应该被实现成一个操作符转换。而是使用一个构造器来把一种类型转换到另外一种不在相同域空间中的类型。
如果转换操作存在有潜在的损耗,就不要提供一个隐式的转换操作符。
例如,从 Double 到 Single 的转换就不应该是一个隐式的转换操作,因为 Double 要比 Single 拥有更高的精确度。应该能够为有损耗的转换操作提供一个明确的转换操作符。
不要从隐式的转换中抛出异常。
隐式的转换通过系统而被调用;用户也许并不知道转换已经发生并且代码也将是难以调试的。