【问题标题】:Why is the C# using directive called a "directive" when it does not affect the compilation process?为什么 C# using 指令在不影响编译过程的情况下称为“指令”?
【发布时间】:2014-04-16 16:10:11
【问题描述】:

问题

为什么不影响编译过程的C#using directive被称为指令

指令预处理器指令examples)这两个术语有区别吗?

这个问题是关于术语的。

阐述

有一个using directive,还有一个using statement。我在这里说的是using directive

维基百科说directives 是用于改变编译过程的编译器指令。

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

那么,如果using指令没有改变编译过程,为什么还叫指令呢?

【问题讨论】:

  • 我认为维基文章描述了一种不同类型的directive,正如它在第二句话中所说:Directives are not part of the language proper – they are not part of the grammar, and may vary from compiler to compilerusing-directive 是语法的一部分,所以这只是一个不同的上下文该词用于

标签: c# using-directives


【解决方案1】:

您链接到的答案指出删除 unused 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(); }

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多