簡體   English   中英

為什么我不能將類的名稱用作類型?

[英]Why I can't use the name of the class as a type?

我正在使用XmlSerializer構造函數,該構造函數要求Type對象:

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

為什么將類的名稱用作類型呢? 像這樣:

XmlSerializer mySerializer = new XmlSerializer(MyClass);

關於這個問題的第一條評論是正確的,但我認為可以根據實際原因進一步澄清。

MyClass不能單獨執行。 為什么? 因為c#編譯器本身沒有代碼來翻譯對執行環境有意義的“ MyClass”。

第一條語句起作用是因為XmlSerializer的構造函數需要類'Type'的實例。 typeof運算符返回Type類型的實例,該實例包含有關“ MyClass”類的信息。 運算符typeof(?)的參數必須是編譯時已知的類型。 運算符'typeof'的含義在#編譯器中進行了烘焙,因此在編譯過程中typeof(ClassName)將生成代碼,該代碼返回'Type'類的實例,該實例包含有關指定類(參數)的信息。 因為Type與其他任何類一樣,所以您甚至可以使用typeof(Type)。

XmlSerializer構造函數的參數期望使用System.Type類型的實例。 標識符MyClass不對應任何實例。 這只是一個班級的名字。 typeof關鍵字返回一個System.Type實例,該實例表示您指定的類型(在本例中,該System.Type實例表示MyClass類)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM