我已经开发了4年的.NET应用程序。到目前为止,我不需要为我创作的类创建任何隐式转换 如果没有创建隐式转换,你能提供现实生活中的情况吗?
谢谢
答案 0 :(得分:4)
只有在可以使用 no loss 数据转换为或来自(优选和)其他类型的类型时,才应定义隐式转换。另一个标准是隐式转换应该相当便宜,因为使用您的类的开发人员可能不会意识到隐式转换何时发生。
一个例子:坐标系之间的转换。例如,可以转换为笛卡尔坐标的极坐标向量可能是方便的。但是,由于浮点数四舍五入,将其保留为显式转换仍然会更好,以便程序员必须进行类型转换以强制转换。
如果您有两种数据类型以相同的格式存储数据,则可能需要进行隐式转换,但这些类型之间的唯一区别是语义 - 它们的使用方式或含义。真实世界示例:具有相同(或兼容)基础表示但仅在epoc开始日期不同的日期时间数据类型之间的转换。在将较旧的代码库迁移到较新的框架时,您会发现这些,在这些框架中,两者都定义了日期时间类型,但语义略有不同。这里的隐式转换(假设根本没有数据丢失)可能是好的,也是个好主意。
如果您有一组类型,并且您已经为类型之间的转换方式定义了自己的规则,那么这些转换中的一些可能是隐式的,一些是明确的,具体取决于转换的“严重性”。我在.NET中实现类时使用隐式转换的主要实例是我为Delphi运行时库实现Win32 Variant语义的时候。 Win32和Delphi语言指定了Variant数据上的一些转换,这些转换可以完成。
您还没有发现创建隐式转换的需要实际上是一件好事。只是因为你不能意味着你应该这样做。 .NET中存在隐式转换,主要是为了允许不同的编程语言以一种应该可互操作且可被其他.NET语言理解的方式表示自己的语义。