2014-03-12 176 views
3

問題爲什麼C#using指令在不影響編譯過程時調用「指令」?

爲什麼C#using directive稱爲指令當它不影響編譯過程?

是否有條款指令預處理指令examples)之間的區別嗎?

這個問題是關於術語。

有一個using directive,有一個using statement。我在這裏談論的是using directive

維基百科說,directives是編譯器的指令,它改變了編譯過程。

這個Stackoverflow answer表示C#使用指令不會以任何方式更改編譯過程。

所以,如果使用指令不會改變編譯過程,爲什麼它仍然被稱爲指令?

+1

我覺得維基文章描述了一個別樣正如它在第二句中所說的'指令'一樣:'指令不是語言本身的一部分 - 它們不是語法的一部分,可能與com不同堆到編譯器「,但」使用指令「是語法的一部分,所以這只是一個不同的上下文單詞用於 – DrCopyPaste

回答

8

您鏈接到狀態,取消未使用using指令不影響彙編輸出答案。

using指令列出了允許編譯器在生成的代碼中隱式引用的名稱空間。如果沒有該指令,則必須完全限定所有的名字,所以:的

using System.Diagnostics; 
... 
var x = new Process(); 

代替

var x = new System.Diagnostics.Process(); 

所以這是一個真正的指令在某種意義上說,它改變了編譯器如何解釋你的代碼。

A 預處理器指令適用於在編譯之前更改源代碼之前的。 C#中的預處理器指令非常有限。與在C/C++中完全重寫源代碼的C/C++不同 - 在C#中,您可以打開和關閉代碼塊,並更改一些編譯器標誌。據我所知,它們不像在C/C++中那樣在單獨的階段中應用。

而對於完整性,該using語句語法糖,轉向

using (var x = new IDisposable()) {} 

(其中var x =可選)

var x = new IDisposable(); 
try{ ... } 
finally { x.Dispose(); }