在C#中自动导入嵌套的命名空间

Lew*_*rin 17 .net c#

对不起,如果已经问过这个问题.我开始研究C#并注意到C#不会自动导入嵌套的命名空间.我不明白:

using System;
Run Code Online (Sandbox Code Playgroud)

应该自动导入System命名空间中包含的所有类吗?所以我不需要写

using System.Windows.Form;
Run Code Online (Sandbox Code Playgroud)

我会理解,using Windows.Form即使工作.但是编译器无法解决它!什么是的点using System;之前呢?那么为什么不自动using System;导入- 抱歉如果导入这个词在这里是错误的...也许移动到全局命名空间是正确的术语.System.WindowsSystem.Windows.Forms

Ode*_*ded 23

C#不是Java.

使用using指令,因此您不必键入类型的完全限定名称.它还有助于消除类型名称的歧义(例如使用别名).

在的情况下Console,例如,你不需要输入System.Console.

理解命名空间和程序集之间的区别非常重要 - 命名空间是类型的逻辑分组.程序集是类型的物理分组.命名空间可以跨越程序集.

当你引用一个组件(这更像是在Java中导入一个包),您可以访问所有的公共类型在它的.要使用您需要唯一标识它的类型.这是通过命名空间完成的 - 该using指令只是意味着您不必键入该类型的完全限定名称.


Pet*_*nar 12

using指令有两个用途:

允许在命名空间中使用类型,以便您不必限定在该命名空间中使用类型:

使用System.Text;

为命名空间或类型创建别名.这称为使用别名指令.

使用Project = PC.MyCompany.Project;

http://msdn.microsoft.com/en-us/library/sf0df423.aspx

但是,您必须注意,System和System.Windows.Form无论如何都不是通过名称本身连接的.如果导入(使用)系统,则意味着您将在此类中使用系统程序集类型.在Visual Studio项目的引用部分指定的实际引用,您可以使用它(即使没有使用语句,因为这只是类型的快捷方式).


Res*_*uta 6

C#不会导入嵌套的命名空间,这是设计使然.

命名空间范围允许您组织代码并为您提供创建全局唯一类型的方法.

嵌套命名空间用于对相关功能进行分组,但是按需使用部分命名空间.

我想你不希望拥有来自如此大的命名空间的所有类型,就像System你唯一需要的那样System.Windows.

所以可能问题是为什么C#没有using System.*;像java那样的东西.我不知道答案,但我想这是因为KISS原则.这就像使用一样

select *

你永远不会知道你将添加什么类型以及它们将如何影响现有代码.