2010-03-16 65 views

回答

14

該代碼會工作。基本上,一個字符串文字的類型是string - 即它的值是一個字符串引用(以及在那個字符串引用的字符串)。可以,如果有兩種類型之間的變換的一種類型的值僅分配給另一種類型的可變 - 無論是用戶定義的或內置在這種情況下,沒有轉換從stringEmployee,因此錯誤。

相反,一些其他的答案,類型不必須是相同 - 比如,這是好的:

object x = "string literal"; 

這很好,因爲有從stringobject隱式引用轉換。同樣你可以寫:

XNamespace ns = "some namespace"; 

因爲有implicit conversion from string to XNamespace

要回答第二個問題:要查看.NET中的某個類型是值類型還是引用類型... structenum類型是值類型;其他一切(類,委託,接口,數組)都是引用類型。這是不包括指針類型,這是一個有點不同:)

+0

+1使用'XNamespace'進行隱式轉換的絕佳示例。 – 2010-03-16 14:51:00

+0

很好的解釋..我被拒絕了,因爲這個問題,它真的尷尬,我沒有回答這個基本的問題,我搞砸了! – TalentTuner 2010-03-16 14:53:16

+1

我發現很難相信微軟會問這麼簡單的問題(儘管它們很棘手)。但與谷歌面試相比,這沒什麼。 – JonH 2010-03-16 14:56:24

2

引用類型是不可轉讓的,除非它們是完全相同的類型(這被稱爲類型安全)。第一個示例的工作原理是將字符串文字分配給類型爲System.String的變量。第二個示例不起作用,因爲您正在將字符串文字分配給Employee類型的變量。類型必須匹配或可從右向左分配才能賦值工作。

+0

相同類型或子類型。您可以將DeveloperEmployee分配給員工(如果DeveloperEmployee從員工繼承)。 – dbemerlin 2010-03-16 14:49:22

+0

對 - 這就是我指定的。 – 2010-03-16 14:50:28

+0

爲什麼你要說「引用類型不能賦值,除非是相同的類型」?類型安全規則對於值類型是相同的,爲什麼混淆更多? – Marek 2010-03-16 14:51:53

2
Employee e = "Saurabh"; 

不能簡單地工作,因爲它們是不同的類型。如果你有一個字符串的隱式轉換到Employee

+1

向Employee添加一個隱式運算符,這將起作用。 假設Employee有一個接受字符串參數的構造函數: public static implicit operator Employee(string name) { return new Employee(name); } – 2010-05-05 10:44:06

2
object x; 

x = new Employee(); 

x = "Hello World!"; 
相關問題