2013-04-08 85 views
2

我們可以將像int這樣的值類型轉換作爲向上轉換的float轉換並將其浮動爲int作爲向下轉換嗎?我相信當我們談論向上轉換和向下轉換時,我們特別指的是參考轉換。在C#中向上轉換#

+0

「我們特別指的是參考轉換」,通常但不一定。向上和向下轉換與類型之間的繼承關係有關,而不是值v的引用類型。對於所有實際的目的而言,這意味着引用類型,但是這並不排除有人擁有一組實現接口的結構,並允許將接口引用上傳到結構類型。然而,這樣做是瘋狂的,僅僅因爲我們可以做點什麼並不意味着我們應該這樣做。上演是不好的,可以嗎?所以不要慌張,可以嗎?如果可以的話, – 2013-04-08 13:57:48

回答

9

不,價值類型之間的轉換不能被視爲上傳或向下轉換,因爲它們不共享等級鏈接(它們不以任何方式或形式彼此繼承)。

上傳意味着您正在將子類型引用更改爲超類型引用。

向下傳播是相反的方式。

+0

+ gabillion。 – 2013-04-08 13:48:18

0

不,浮點數不是一個int的特例(I.E.子類)。他們是不同的類型。

0

不,上行和下行只在繼承的情況下有效。當您在使用簡單類型轉換時可以保存更多或更少數據的值類型之間進行轉換時。其中有兩種不同的類型: 1.隱式轉換。這些轉換可以作爲轉換是「安全」的,也就是說不會丟失數據。例如,您可以安全地將int值轉換爲long值。 2.顯式轉換。這些轉換可能會導致數據丟失,因此您必須進行明確的轉換才能進行轉換。例如,將long值轉換爲int是不安全的。

更多輸入,請參見:http://msdn.microsoft.com/en-us/library/ms173105.aspx

0

這些不是向上轉型和向下轉換的示例中,如其他人描述。然而,我們可以討論擴大和縮小原始類型轉換(例如,從int到long是一個擴大的轉換,因此可以隱式完成)。然而,在這種特殊情況下(float/int),轉換隻是一點點不同。

由int到float的隱式轉換,但由於float無法精確地表示整數,轉換實際上仍然會失去精度。這是值得了解的,因爲它隱含了隱含轉換永遠不會丟失信息的一般規則。如果你將整數轉換爲浮點數,並且與它們進行一堆積累數學運算,然後嘗試轉換回整數,這真的很明顯。在這些情況下,如果您假定浮點數是十進制數的完美表示,則近似誤差可能會累積,從而產生不正確的結果。