我們知道,字符串是引用類型,所以我們必須爲什麼字符串是引用類型,但行爲與其他引用類型不同?
,但是,如果我聲明類相同的音符說員工是引用類型,那麼爲什麼下面的代碼不能正常工作?
Employee e = "Saurabh";
2-我們如何確定類型是引用類型還是值類型?
我們知道,字符串是引用類型,所以我們必須爲什麼字符串是引用類型,但行爲與其他引用類型不同?
,但是,如果我聲明類相同的音符說員工是引用類型,那麼爲什麼下面的代碼不能正常工作?
Employee e = "Saurabh";
2-我們如何確定類型是引用類型還是值類型?
該代碼會工作。基本上,一個字符串文字的類型是string
- 即它的值是一個字符串引用(以及在那個字符串引用的字符串)。可以,如果有兩種類型之間的變換的一種類型的值僅分配給另一種類型的可變 - 無論是用戶定義的或內置在這種情況下,沒有轉換從string
到Employee
,因此錯誤。
相反,一些其他的答案,類型不必須是相同 - 比如,這是好的:
object x = "string literal";
這很好,因爲有從string
到object
隱式引用轉換。同樣你可以寫:
XNamespace ns = "some namespace";
因爲有implicit conversion from string to XNamespace
。
要回答第二個問題:要查看.NET中的某個類型是值類型還是引用類型... struct
和enum
類型是值類型;其他一切(類,委託,接口,數組)都是引用類型。這是不包括指針類型,這是一個有點不同:)
引用類型是不可轉讓的,除非它們是完全相同的類型(這被稱爲類型安全)。第一個示例的工作原理是將字符串文字分配給類型爲System.String
的變量。第二個示例不起作用,因爲您正在將字符串文字分配給Employee
類型的變量。類型必須匹配或可從右向左分配才能賦值工作。
Employee e = "Saurabh";
不能簡單地工作,因爲它們是不同的類型。如果你有一個字符串的隱式轉換到Employee
向Employee添加一個隱式運算符,這將起作用。 假設Employee有一個接受字符串參數的構造函數: public static implicit operator Employee(string name) { return new Employee(name); } – 2010-05-05 10:44:06
因爲他們是不一樣的類型,如果你定義的TypeConverter,然後,將工作。
http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter.aspx
哈哈,謝謝史蒂文,很高興看到你仍然癡迷,你可憐的怪胎。 – heisenberg 2010-09-07 19:43:52
object x;
x = new Employee();
x = "Hello World!";
+1使用'XNamespace'進行隱式轉換的絕佳示例。 – 2010-03-16 14:51:00
很好的解釋..我被拒絕了,因爲這個問題,它真的尷尬,我沒有回答這個基本的問題,我搞砸了! – TalentTuner 2010-03-16 14:53:16
我發現很難相信微軟會問這麼簡單的問題(儘管它們很棘手)。但與谷歌面試相比,這沒什麼。 – JonH 2010-03-16 14:56:24