你有多经常为你的类创建隐式转换?

7

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

谢谢


我无法想出任何实际原因,超越了 .NET 的数字类型已经提供的内容。 - leppie
2
这应该是社区维基(没有确定性答案)。或者重述为何时以及为什么应该或不应该这样做。那会更好些。 - R. Martinho Fernandes
@Martinho 已经有一个答案被接受了,而且它仍然不是社区维基,所以我认为所有的希望都已经失去了。 :) - bzlm
1个回答

4
当类型可以转换为另一种类型并且没有数据损失时,应该定义隐式转换。另一个标准是,隐式转换应该相对便宜,因为使用您的类的开发人员可能不知道何时发生隐式转换。
例如,坐标系之间的转换。例如,可以将极坐标向量转换为笛卡尔坐标,但由于浮点舍入误差,最好仍将其作为显式转换留下来,以便程序员必须进行强制转换。
如果您有两种数据类型,它们以相同的格式存储数据,但唯一区别在于语义-它们如何使用或表示什么。现实世界的例子:在具有相同(或兼容)基础表示的datetime数据类型之间进行转换,但仅在epoc开始日期方面有所不同。当将旧代码库迁移到新框架时,您会发现这些情况,其中两个都定义了datetime类型,但语义略有不同。在这里进行隐式转换(假设完全没有数据损失)可能是可以的,并且是个好主意。
如果您有一组类型,并且已经定义了它们之间可以如何转换的规则,则其中一些转换可能是隐式的,而另一些可能是显式的,具体取决于转换的“严重程度”。我在.NET中实现类时使用隐式转换的主要实例是在实现Delphi运行时库的Win32 Variant语义时。 Win32和Delphi语言指定了可以对Variant数据进行的许多转换,这些转换可以隐含地完成。
您没有发现需要创建隐式转换实际上是一件好事。仅因为您可以并不意味着您应该这样做。隐式转换主要存在于.NET中,以便不同的编程语言可以以可互操作且可理解其他.NET语言的方式表示自己的语义。

4
BCL中的一个很好的例子是将字符串提升为XName。这样做只会带来好处。 - R. Martinho Fernandes
XName很漂亮。使用XNamespace构建有点奇怪,但一旦掌握了模式,就非常好用。 - dthorpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接