7

我已经开发 .NET 应用程序 4 年了。到目前为止,我不需要为我创作的类创建任何隐式转换。
当你不能不创建隐式转换时,你能提供现实生活中的情况吗?

谢谢

4

1 回答 1

4

仅当类型可以转换为或从(最好是从)另一种类型转换而不会丢失数据时,才应定义隐式转换。另一个标准是隐式转换应该相当便宜,因为使用您的类的开发人员可能不会知道隐式转换何时发生。

一个例子:坐标系之间的转换。例如,可以转换为笛卡尔坐标的极坐标矢量可能很方便。但是,由于浮点舍入,最好将其保留为显式转换,以便程序员必须进行类型转换才能强制转换。

如果您有两种以相同格式存储数据的数据类型,则可能需要进行隐式转换,但类型之间的唯一区别是语义 - 它们的使用方式或含义。真实世界的示例:具有相同(或兼容)基础表示但仅在 epoc 开始日期方面不同的日期时间数据类型之间的转换。在将旧代码库迁移到新框架时,您会发现这些,它们都定义了日期时间类型,但语义略有不同。这里的隐式转换(假设根本没有数据丢失)可能没问题,而且是个好主意。

如果您有一组类型,并且您已经定义了自己的类型如何在彼此之间转换的规则,那么根据转换的“严重性”,其中一些转换可能是隐式的,而另一些可能是显式的。在 .NET 中实现类时使用隐式转换的主要实例是在为 Delphi 运行时库实现 Win32 Variant 语义时。Win32 和 Delphi 语言对 Variant 数据指定了许多可以隐式进行的转换。

您还没有发现需要创建隐式转换实际上是一件好事。仅仅因为你可以并不意味着你应该。.NET 中存在隐式转换主要是为了允许不同的编程语言以一种应该可以被其他 .NET 语言互操作和理解的方式来表示它们自己的语义。

于 2010-04-06T06:43:43.340 回答