为什么C#using指令在不影响编译过程时称为“指令”?

时间:2014-03-12 13:26:11

标签: c# using-directives

问题

为什么C#using directive在不影响编译过程时会调用指令

术语指令预处理程序指令examples)之间是否存在差异?

这个问题与术语有关。

精化

有一个using directive并且有一个using statement。我在这里谈论using directive

维基百科说directives是编译器的指令,它改变了编译过程。

此Stackoverflow answer表示C#using指令不会以任何方式更改编译过程。

那么,如果using指令没有改变编译过程,为什么它仍然被称为指令?

1 个答案:

答案 0 :(得分:8)

您链接的答案表明删除未使用的 using指令并不会影响编译输出

using指令列出了允许编译器在生成的代码中隐式引用的命名空间。如果没有该指令,您必须完全限定所有名称,因此:

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

而不是

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

所以它是一个真正的指令,因为它改变了编译器解释代码的方式。

预处理程序指令用于在编译之前更改源代码。 C#中的预处理程序指令非常有限。与C / C ++不同 - 您可以在编译之前完全重写源代码 - 在C#中,您可以打开和关闭代码块,并更改一些编译器标志。据我所知,它们并没有像C / C ++一样在单独的阶段应用。

为了完整起见,using语句是语法糖,转向

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

(其中var x =是可选的)

进入

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