Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中自动导入嵌套名称空间#_C#_.net - Fatal编程技术网

C# 在C语言中自动导入嵌套名称空间#

C# 在C语言中自动导入嵌套名称空间#,c#,.net,C#,.net,对不起,如果这个问题已经被问到了。 我开始研究C,并注意到C不会自动导入嵌套的名称空间。 我不明白: using System; 应该自动导入系统命名空间中包含的所有类,对吗? 所以我不需要再写了 using System.Windows.Form; 如果使用Windows.Form还能工作,我会理解的。但是编译器无法解析它!使用系统的意义是什么然后呢? 那么为什么使用系统不自动导入System.Windows以及System.Windows.Forms-如果此处的“导入”一词有误,请道歉。

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

using System;
应该自动导入系统命名空间中包含的所有类,对吗? 所以我不需要再写了

using System.Windows.Form;
如果
使用Windows.Form
还能工作,我会理解的。但是编译器无法解析它!
使用系统的意义是什么然后呢?
那么为什么
使用系统不自动导入
System.Windows
以及
System.Windows.Forms
-如果此处的“导入”一词有误,请道歉。。也许转移到全局名称空间是正确的术语。

C#不是Java

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

例如,对于
Console
,您不需要键入
System.Console

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

当引用程序集时(这更像是在Java中导入一个包),您可以访问其中的所有公共类型。为了使用类型,您需要唯一地标识它。这是通过名称空间完成的。
using
指令只意味着您不必键入类型的完全限定名

using指令有两种用途:

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

使用系统文本

为命名空间或类型创建别名。这 被称为using alias指令。

使用Project=PC.MyCompany.Project

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

C#不导入嵌套的名称空间,这是出于设计

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

嵌套名称空间用于对相关功能进行分组,但可根据需要使用部分功能

如果您只需要
System.Windows
,我猜您不会想要像
System
这样一个大名称空间中的所有类型

因此,问题可能是为什么C#没有类似于使用System.*的
就像java一样。我不知道答案,但我想这是因为亲吻原则。这有点像使用

选择*


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

即使在Java中,您也必须显式编写

import System.*;
大多数情况下,您不需要所有嵌套的名称空间。这些只会使IntelliSense变得混乱。

使用“给定名称空间”意味着您可以访问直接在其中实现的所有定义,而不是它将递归地查找嵌入的名称空间;否则会破坏“使用”语句的目的


名称空间的存在是为了避免类名歧义。此处的“Using”语句是为了避免使用嵌套在名称空间中的完全限定类型,因为您知道不会(或很少)出现歧义。

使用“Using”语法,您可以快速访问已在项目设置中列为引用的名称空间。如果名称空间列为引用,则您已经可以通过其全名访问它,而无需“using”指令。只保存击键。

不,它不是这样工作的

我会很好地反驳你说的话:intellisnse会发疯,找到你想要的东西将是地狱


您确实可以访问每个可用名称空间上的所有内容(使用点),
使用
关键字简化了这一点,因为您不必指定类或结构“来自哪个名称空间”(我的意思是定义的)。

C#不是这样工作的,在Java中,您可以导入带有通配符的名称空间,但无论出于何种原因,C#设计师选择不这样做。我不确定辩论为什么是建设性的。克隆人——这是一个合理的问题。@CodingGorilla:“为什么”不是一个辩论;有一个明确的原因(如Oded所说,C#名称空间是逻辑的,而不是物理的分组)。+1。好的方面-C允许名称空间在程序集之间拆分,因此您的项目可能没有导入(或不想导入)其他程序集。我刚刚意识到我有多困惑。我总是混淆使用和导入?我想他们一定是不同的东西。。C#根本不导入类吗?我知道C++和java做的…@ LeWSthelin in .NET,你可以添加一个包含你要导入的类型的程序集的引用。@ LeWS Tein:当然你应该使用“使用”指令,因为它在缩短给定类型的必要命名空间时提高了代码的可读性。否则,仅使用命名空间中的一个类就可以导入整个命名空间。在编辑器中编写代码时,它会在intellisense视图中增加该名称空间中存在的所有类。因此,使用将导入当前名称空间中的所有类,但当它命中嵌套名称空间时会忽略它吗?除非我明确说明。。这就是重点吗?@Lewsterin-这不是“忽略”它。您只是没有指定“快捷方式”<代码>使用
指令,因此您不必指定完整的