更新:2007 年 11 月
转换运算符可将对象从一种类型转换为另一种类型。转换运算符可以是隐式的也可以是显式的。隐式转换运算符不需要在源代码中指定类型转换即可执行转换。显式转换运算符则要求在源代码中指定类型转换才能执行转换。
下面的签名演示 Point 类的显式转换运算符,该转换运算符用于在 Point 和 Size 之间进行转换。
[Visual Basic]
Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size
[C#]
public static Size op_Explicit(
Point p
);
如果最终用户未明确要求此类转换,则不要提供相应的转换运算符。
理想情况下,应存在客户研究数据,以支持定义转换运算符。此外,如果存在一些示例,其中一个或多个类似类型需要此类转换,也可以支持定义转换运算符。
不要在类型域之外定义转换运算符。
例如,Int32、Double 和 Decimal 都是数字类型,而 DateTime 不是数字类型。将 Double 类型转换为 DateTime 类型不应以转换运算符的形式实现。如果要将一种类型转换为不同域中的另一种类型,请使用构造函数。
如果转换可能丢失信息,则不要提供隐式转换运算符。
例如,从 Double 到 Single 的转换不应是隐式转换,原因是 Double 的精度高于 Single。对于有损转换,可以提供显式转换运算符。
不要在隐式强制转换中引发异常。
隐式强制转换是由系统调用的;用户可能不会觉察发生了转换,这会给调试代码带来困难。
如果对强制转换运算符的调用导致有损转换,而该运算符的协定不允许有损转换,则会引发 System.InvalidCastException。
部分版权所有 2005 Microsoft Corporation。保留所有权利。
部分版权所有 Addison-Wesley Corporation。保留所有权利。
有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。