2014-01-23 36 views
1

今天我注意到我們可以定義一個名爲vardynamic的類。首先,我認爲這是不可能的,因爲這些是特殊的關鍵字,不能作爲Class name.使用。但後來我嘗試了它,而且我很驚訝。這是一個奇怪的現象,當我定義了兩個類:爲什麼可以定義一個名爲var或dynamic的類?

class var 
{ 

} 

class dynamic 
{ 

} 

,並利用它們是這樣的:

enter image description here

它不給我任何error.But當我嘗試運行我的程序它給這個錯誤:

Cannot implicitly convert type string to dynamic

但正如你可能已經注意到,我的dynamic類表現得像一個非標準的C#class.When我試試這個:

dynamic d = new dynamic(); 

我得到這個錯誤:

Cannot instantiate dynamic object.

讓我們來看看var:

enter image description here

在這種情況下VAR仍評估爲隱式類型定義關鍵字,我的變量類型推斷爲(注意它的顏色是綠色而不是藍色,它是類名稱的顏色)。但是當我運行該程序時,它給了我同樣的例外:

Cannot implicitly convert type string to var

但有趣的是,當我嘗試創建這樣一個新的變種如:

var d = new var(); 
Console.WriteLine(d.GetType()); 

它不給我任何異常,我得到這個輸出:

ConsoleApplication3.var 

現在畢竟這些我很困惑。我想知道這裏有什麼區別,爲什麼編譯器讓我們創建名爲vardynamic的類,當我創建一個名爲dynami的類時,它不會給我任何錯誤c但如果我嘗試創建動態實例,我得到一個錯誤。但是,如果我嘗試創建一個var實例,它不會給我任何錯誤。那不是讓人困惑嗎?我在等待明確的解釋。

注意:對不起我的英文和語法錯誤。

回答

5

這些被稱爲contextual keywords
如果您沒有自己的類型,那麼它們只能表現爲關鍵字。

這個問題的關鍵在於準確地說明你剛剛做了什麼。因爲這些關鍵字是由更新版本的C#(3.0和4.0)引入的,所以有可能(雖然不太可能)某些現有的代碼庫具有這些名稱的類,就像您所做的那樣。

因此,如果編譯器看到這樣的類,它將完全按照過去的方式進行編譯,並將它們視爲常規類而不是關鍵字。

+0

我明白了。但據我所知var關鍵字後添加了動態關鍵字。爲什麼我可以創建'var'實例,但我無法創建'動態'實例? –

+0

@ Selman22:這對我來說很好,你一定在做錯事。 – SLaks

+0

我看不出有什麼不對:http://imgur.com/NYEo08v –

相關問題