您多久为一次类创建隐式转换?

Vit*_*nco 7 .net casting implicit-typing

我已经开发了4年的.NET应用程序.到目前为止,我不需要为我创作的类创建任何隐式转换.
如果没有创建隐式转换,您能否提供真实情况?

谢谢

dth*_*rpe 4

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

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

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

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

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

  • BCL 中的一个很好的例子:将字符串提升为 XName。只有好的东西才会来自于此。 (4认同)