转换运算符

转换运算符可将对象从一种类型转换为另一种类型。 转换运算符可以是隐式的也可以是显式的。 隐式转换运算符不需要在源代码中指定类型转换即可执行转换。 显式转换运算符则要求在源代码中指定类型转换才能执行转换。

下面的签名演示 Point 类的显式转换运算符,该转换运算符用于在 PointSize 之间进行转换。

[Visual Basic]

Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size

[C#]

public static Size op_Explicit(
Point p
);

如果最终用户未明确要求此类转换,则不要提供相应的转换运算符。

理想情况下,应存在客户研究数据,以支持定义转换运算符。 此外,如果存在一些示例,其中一个或多个类似类型需要此类转换,也可以支持定义转换运算符。

不要在类型域之外定义转换运算符。

例如,Int32DoubleDecimal 都是数字类型,而 DateTime 不是数字类型。 将 Double 类型转换为 DateTime 类型不应以转换运算符的形式实现。 如果要将一种类型转换为不同域中的另一种类型,请使用构造函数。

如果转换可能丢失信息,则不要提供隐式转换运算符。

例如,从 DoubleSingle 的转换不应是隐式转换,原因是 Double 的精度高于 Single。 对于有损转换,可以提供显式转换运算符。

不要在隐式强制转换中引发异常。

隐式强制转换是由系统调用的;用户可能不会觉察发生了转换,这会给调试代码带来困难。

如果对强制转换运算符的调用导致有损转换,而该运算符的协定不允许有损转换,则会引发 System.InvalidCastException。

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

其他资源

成员设计准则

类库开发的设计准则