我以爲類可以隱式轉換隻:爲什麼盒裝整數值可以隱式轉換爲字符串類型?
- 在從其所源自
- 它實現任何接口的鏈中的任何類
一個)上述無爲真在下面的例子中,使爲什麼盒裝整數值得到隱式轉換爲string
類型:
string s = 100 + 「question」;
b)瓦時y,則不會在明年分配的價值也得到隱式轉換爲string
類型:
string s = 100;
感謝名單
我以爲類可以隱式轉換隻:爲什麼盒裝整數值可以隱式轉換爲字符串類型?
一個)上述無爲真在下面的例子中,使爲什麼盒裝整數值得到隱式轉換爲string
類型:
string s = 100 + 「question」;
b)瓦時y,則不會在明年分配的價值也得到隱式轉換爲string
類型:
string s = 100;
感謝名單
這只是字符串連接運算符 - 無關尤其是拳擊或整數......這是任何與串連接的值。
你的第二個例子不涉及任何串聯,因此沒有轉換。
從C#屬,節7.8.4:
對於x + y形式的操作, 二進制運算符重載解析 (§7.3.4)被施加到選擇 特定運營商實現。 操作數轉換爲所選 運算符的參數類型 ,結果 的類型是運算符的返回類型。
預定義的加法運算符是下面列出的 。對於枚舉類型的數字和 ,預定義的 加法運算符計算兩個操作數的總和。當一個或兩個操作數都是字符串類型時, 預定義的加法運算符 連接操作數的字符串表示 。
然後:
字符串連接:
string operator +(string x, string y); string operator +(string x, object y); string operator +(object x, string y);
二進制+運算的這些重載執行字符串連接。 如果字符串連接的操作數爲空,則替換空字符串。 否則,通過調用從對象類型繼承的虛擬ToString方法,將任何非字符串參數轉換爲其字符串表示形式 。 如果
ToString
返回null,則替換空字符串。
事實上,在你的榜樣,與當前的MS C#編譯器,它只會框中整數,並呼籲string.Concat(object, object)
- 但是編譯器知道將有相同的結果調用string.Concat(100.ToString(), "question")
。
一個有趣的事實點:在string
類本身不存在+運算符。該語言對它有特殊的處理(正如我們已經看到的),最終致電Concat
。這樣做的好處是,
x + y + z
可以編譯成
string.Concat(x, y, z)
可以一氣呵成執行整個級聯,而不是建立一個毫無意義的中間串。
(另請注意,編譯器進行編譯時常量字符串本身的級聯。)
再次你擊敗了我!這麼快... – Aliostad 2010-09-08 18:34:43
該死的雙眸!快16秒。我永遠不會以這樣的速度在C#標籤中捕捉到你。 – jjnguy 2010-09-08 18:37:02
謝謝大家再見 – user437291 2010-09-08 18:41:31
這是+運算符的功能,而不是拳擊。
這與+
運營商有關。
本質上,在這種情況下爲+
方法簽名是:
public string +(string s) {
return this.ToString() + s;
}
所以,int
被轉換到一個string
。
但是,試圖將int
值附加到string
參考中僅僅是語法錯誤。
順便說一句,您的項目符號列表省略了一些項目。您省略了身份轉換,協變和逆變接口轉換,用戶定義的隱式轉換以及轉換爲動態類型。 – 2010-09-08 19:17:45