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