2016-06-09 114 views
0

我使用XmlSerializer構造函數的類對象問:爲什麼我不能將類的名稱用作類型?

XmlSerializer mySerializer = new XmlSerializer(typeof(MyClass)); 

爲什麼不使用類的名稱作爲一種類型一樣嗎?像這樣:

XmlSerializer mySerializer = new XmlSerializer(MyClass); 
+5

因爲語言規範和隨後的編譯器都需要它。 –

+1

爲什麼不用一個字符串作爲數字而不投射?接縫原因。 –

+0

但我明白,MyClass是一種類型,我錯了嗎? – user3646717

回答

0

XmlSerializer構造函數需要一個System.Type類型的實例作爲其參數。標識符MyClass不對應於任何事物的實例;這只是一個班級的名字。 typeof關鍵字返回一個System.Type實例,它表示您指定的類型(在這種情況下,表示MyClass類的System.Type實例)。

1

對這個問題的第一評論是正確的,但我認爲它可以進一步澄清與實際原因。

MyClass不是可以自行執行的東西。爲什麼?因爲C#編譯器本身沒有代碼來將'MyClass'翻譯成對執行環境有意義的東西。

第一條語句的作用是因爲XmlSerializer的構造函數期望類'Type'的實例。 typeof運算符返回包含有關類'MyClass'的信息的類Type的實例。 運算符typeof(?)的參數必須是編譯時已知的類型。 運算符'typeof'的含義在#編譯器中烘焙,以便在編譯期間typeof(ClassName)將生成代碼,該代碼返回包含有關指定類(參數)的信息的'Type'類的實例。 因爲Type與其他類一樣,所以甚至可以使用typeof(Type)。

+0

那麼你的回答是否真的澄清了這個概念。謝謝! – user3646717

相關問題