问题
为什么C#using directive在不影响编译过程时会调用指令?
术语指令和预处理程序指令(examples)之间是否存在差异?
这个问题与术语有关。
精化
有一个using directive并且有一个using statement。我在这里谈论using directive。
维基百科说directives是编译器的指令,它改变了编译过程。
此Stackoverflow answer表示C#using指令不会以任何方式更改编译过程。
那么,如果using指令没有改变编译过程,为什么它仍然被称为指令?
答案 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(); }