在C#中,“限定在该命名空间中使用类型”这个语句是什么意思?

3

我是C#的初学者,在使用Console.WriteLine函数时遇到了以下错误。

The name 'Console' does not exist in the current context

我的理解是,using 关键字在 C# 中的作用类似于 JavaScript 中的 requireimport
因此,我在命名空间文件的顶部添加了语句 using System;,因为 IDE 给出了类似于 System.Console 的建议。现在我不再有错误了。
出于好奇,我去了解了一下 C# 文档中的 using Directive 部分。其中有以下说明: using 指令有三个用途: 允许使用命名空间中的类型,以便您无需限定该命名空间中的类型的使用: 那么,以便您无需限定该命名空间中的类型的使用:这部分是什么意思呢?
还有,为什么 using 关键字被称为指令,或者在一般编程中什么是指令,与我在 Angular 中使用的指令有何不同?
谢谢。

2
我认为这意味着你可以使用 Console 而不是限定为 System.Console,类似于在 Cpp 中如果您没有声明 std 命名空间,您将使用 std::cout。 - Steve Byrne
3
“to qualify the use of a type in that namespace” 的意思是,在使用 System 命名空间内的 Console 类时,您必须每次都写出 System.Console。现在想象一下,如果您有更多的命名空间,那么一遍又一遍地编写 Namespace.Another.AThrid.MyType 就会变得非常烦人。 - MakePeaceGreatAgain
2
这样说是否正确,指令在这种情况下将是指导编译器如何编译您正在使用的其他库的指令? - Steve Byrne
2
您也可以编写自己的控制台。这样,您可以使用MyConsole进行编写,当您在代码中编写Console.WriteLine()时,它会调用您的控制台,而不是System Console。但是如果同时使用System和MyConsole,并调用Console.Write(),Visual Studio将抛出错误,因为它不知道您想要使用哪个控制台。 - 110mat110
谢谢大家的解释,让我茅塞顿开 :D。 - Thabo
2个回答

5
“- so that you do not have to qualify the use of a type in that namespace” 的意思是为了不必在该命名空间中限定类型的使用。
C#区分“简单名称”和“限定名称”。简单名称具有名称和可选类型参数,例如String或List,而限定名称由多个以点号分隔的名称组成,例如System.String或System.Collections.Generic.List。
当您有一个using指令时,您可以省略使用的限定符。
“using”关键字为什么被称为指令或者指令在一般编程中是什么?
在C#中,我们有诸如namespace Foo、class Bar或void M() {}之类的“声明”,还有像foreach(varfoo in bar)blah();之类的“语句”。那么, using System;是什么呢?它不是一个声明,没有新项被声明。它也不是一个语句-语句是控制流元素,但是使用指令不会引入控制流。它指示编译器采用特定规则来解析名称,因此它是一条指令。
所有这些信息都在C#规范中。我强烈建议您获得规范副本,并在遇到这些问题时查阅它。这对您来说将比在此处发帖更快,更容易。

非常感谢您提供的如此精炼明了的解释,我肯定会从现在开始使用文档,再次感谢。 - Thabo

3
“so that you do not have to qualify the use of a type in that namespace”这个部分的意思是“这样你就不必在使用该命名空间中的类型时进行限定”。在System命名空间中有一个静态类Math,您可以引用其中的静态方法Min,而不需要任何using语句:
var z = System.Math.Min( x, y );

或者你可以通过使用System命名空间来摆脱System.:

using System;
[...]
var z = Math.Min( x, y );

或者您甚至可以在C# 6中摆脱Math。

using static System.Math;
[...]
var z = Min( x, y );

第三个选项基本上允许您将静态类视为命名空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接