Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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/4/unix/3.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#_Namespaces - Fatal编程技术网

不使用C#名称空间有什么危险?

不使用C#名称空间有什么危险?,c#,namespaces,C#,Namespaces,我已经向自己证明,编译和运行应用程序不需要名称空间。但是,不使用名称空间的危险和陷阱是什么?它创建了我试图避免的层 我知道你在大喊大叫,但是敏捷和抽象又如何呢?在代码和对象之间存在20层抽象。我不是在问它是否违反了这个月的敏捷风格。如果不使用名称空间,那么真实世界会出现什么问题 编辑: 创建独立类dll,以便在类项目中没有冲突。试图避免当我在其他项目中包含它时必须使用完整的限定名。myNamespace.myClass myClass=新建myNamespace.myClass() 从评论来看,

我已经向自己证明,编译和运行应用程序不需要名称空间。但是,不使用名称空间的危险和陷阱是什么?它创建了我试图避免的层

我知道你在大喊大叫,但是敏捷和抽象又如何呢?在代码和对象之间存在20层抽象。我不是在问它是否违反了这个月的敏捷风格。如果不使用名称空间,那么真实世界会出现什么问题

编辑:

创建独立类dll,以便在类项目中没有冲突。试图避免当我在其他项目中包含它时必须使用完整的限定名。myNamespace.myClass myClass=新建myNamespace.myClass()

从评论来看,命名冲突似乎是最大的问题


我想我应该使用using语句,然后振作起来……

您可能会遇到冲突,这不是C#的标准做法。从长远来看,这不会真正伤害任何东西

如果将类命名为与另一个可见类相同的名称,则可能会发生冲突。例如,如果你给你的班级命名为
Math
,并且有一个
使用系统使用语句时,会出现冲突,只有通过指定
System.Math
才能解决

同样,这不是规范,也不是应该在内部使用之外发布的内容,但听起来你已经知道了:)

它创建了我试图避免的层

没有创建真正的附加“层”。名称空间完全允许对类型进行组织,并有助于防止在项目变大和使用更多库时发生命名冲突

就运行时而言,没有名称空间——所有类型都是完全限定的,C#中的名称空间只是更改类型名称。关闭名称空间只会使您的类型名称更可能与其他名称冲突,但不会对代码是否工作产生“实际影响”,前提是您在项目中不多次使用相同的名称,或者使用与引用程序集中的类型名称相同的名称,并通过
使用
导入


根据评论进行编辑:

我所说的“它创建层”是指当我创建对象时,我必须将名称空间添加为层。(即myNamespace.myClass myClass=新建myNamespace.myClass();)


请注意,只有当您没有使用myNamespace;
语句,或者在项目中使用多个名称空间时,才需要此项。如果您始终在项目的默认名称空间中工作,则不需要限定名称。

比较没有名称空间的生活可能是一个好主意C语言不支持名称空间。在它存在的早期,open()函数用于打开文件

这意味着没有一个C程序员可能会为自己的函数使用“open”这个名称

很痛苦,不是吗


名称空间帮助您使用简短和描述性名称。它们不添加图层,只创建较长的名称。由于您可以非常轻松地编写较短的名称,using指令使其变得简单。

名称空间有两种主要用途:

首先,它们使代码的使用者能够更容易地理解、查找和正确使用代码。系统诊断工具位于
system.Diagnostics
命名空间中是有原因的。这样,客户就可以知道其中的内容有什么用

其次,它们是防止名称冲突的机制

第一个事实上更为重要。冲突并不常见。尽管如此,它们仍然是可能的,明智地使用名称空间可以防止冲突


如果您不关心客户如何查找、理解和使用您的代码,并且没有命名冲突,那么请跳过使用名称空间。

名称空间不添加任何“抽象层”。它们是类型的美化名称前缀,编译时支持将给定命名空间的所有成员导入本地范围(
使用
)。使用名称空间不会导致运行时性能下降。换句话说,
namespace Foo{class Bar{}
class Foo_Bar{}
之间几乎没有区别,除了其他代码能够使用Foo
为方便开发者。我所说的“它创建层”是指当我创建对象时,我必须将名称空间添加为层。(即myNamespace.myClass myClass=new myNamespace.myClass();)我知道我可以使用using语句,只是想知道消除这种干扰是否会出现任何问题。这不是一个“抽象层”,实际上也不是任何类型的层。真的是。。。嗯,名称空间。名字的容器。在讨论这类事情时,使用正确的术语是很重要的。无论如何,
使用
语句并不是噪音。如果你认为使用
语句来消除
是一种净奖励,那么当你的项目中的类型名称与你正在使用的库中的类型名称发生冲突时,你将陷入一个痛苦的世界,普遍接受的编程实践。因此,当这些仍然经常出现时,过去会更加有趣。现在有一个正在出现,并且接近关闭。斯塔克斯:这就是原因。这基本上是唯一正确的答案。我想用另一个问题来回答这个问题:“为什么我们要把文件放在目录中,而不是把所有的东西都放在卷的根目录中?”答案是一样的。你能详细谈谈冲突吗?什么会与谁发生冲突?我意识到这不是标准做法。就叫我叛逆者吧:)-1,因为你提出的要求没有得到支持。1.为什么会