2010-04-06 47 views
7

我一直在開發.NET應用程序4年。到目前爲止,我不需要爲我創作的類創建任何隱式轉換。
如果不創建隱式轉換,您能否提供真實情況?您多長時間爲您的課程創建隱式轉化?

謝謝當類型可以轉換到或從(優選從)另一種類型的與數據沒有損失

+0

我想不出超出已經通過.NET的數字類型提供的任何真正的原因。 – leppie 2010-04-06 06:35:20

+2

這應該是社區wiki(沒有明確的答案)。或者重新提出詢問何時以及爲什麼應該或不應該。那會更好。 – 2010-04-06 06:44:29

+0

@Martinho一個答案已經被接受,它仍然不是社區wiki,所以我認爲所有的希望都失去了。 :) – bzlm 2010-04-06 07:01:59

回答

4

隱式轉換應該只限定。另一個標準是隱式轉換應該相當便宜,因爲使用您的類的開發人員可能不會意識到隱式轉換何時發生。

一個例子:座標系之間的轉換。例如,可以轉換爲笛卡爾座標的極座標矢量可能很方便。但是,由於浮點數的四捨五入,最好將其作爲明確的轉換,以便程序員必須強制轉換。

如果您有兩種數據類型以相同的格式存儲數據,但是類型之間的唯一區別是語義 - 如何使用它們或它們的含義,則隱式轉換可能是有保證的。真實世界示例:具有相同(或兼容)底層表示但僅在epoc開始日期不同的日期時間數據類型之間進行轉換。當將舊的代碼庫遷移到新的框架時,你會發現這些框架都定義了一個日期時間類型,但語義略有不同。這裏的隱式轉換(假設根本沒有數據丟失)可能是好的,也是一個好主意。

如果您有一組類型,並且您已經定義了自己的規則以瞭解類型可以如何在彼此之間進行轉換,那麼其中一些轉換可能是隱式的,有些是明確的,取決於轉換的「嚴重性」。在.NET中實現類時,我使用隱式轉換的主要實例是當我爲Delphi運行時庫實現Win32 Variant語義時。 Win32和Delphi語言在Variant數據上指定了許多可以隱含完成的轉換。

您沒有發現需要創建隱式轉換實際上是一件好事。只因爲你可以不意味着你應該。 .NET中存在隱式轉換,主要是爲了允許不同的編程語言以一種應該可以通過其他.NET語言進行交互操作和理解的方式來表示它們自己的語義。

+4

BCL的一個很好的例子:將字符串提升爲XName。只有好的來自這個。 – 2010-04-06 06:53:06

+0

XName很美。想弄清楚如何使用XNamespace構建一個奇怪的問題,但是一旦你得到了這個模式,它就會變得非常甜美。 – dthorpe 2011-11-29 17:50:50

相關問題