3

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

我知道你在尖叫,但是敏捷和抽象又如何呢,所以代码和对象之间存在 20 层抽象。我不是在问它是否违反了本月敏捷事物的这种或那种风​​格。不使用命名空间会导致哪些现实问题(如果有的话)?

编辑:

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

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

我想我应该使用 using 语句并振作起来......

4

4 回答 4

8

命名空间有两个主要用途:

首先,它们使您的代码的使用者能够更轻松地理解、查找和正确使用您的代码。系统诊断工具位于命名空间中是有原因的System.Diagnostics。这样顾客就可以知道里面的东西是干什么用的。

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

第一个实际上是最重要的。冲突并不常见。尽管如此,它们是可能的,并且明智地使用命名空间会阻止它们。

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

于 2013-08-02T22:55:27.557 回答
5

它创建了我试图避免的层。

没有创建真正的附加“层”。命名空间纯粹为组织类型提供了一种方法,并有助于防止随着项目变得更大和使用更多库而发生命名冲突。

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


编辑以回应评论:

我所说的“它创建层”的意思是,当我创建对象时,我必须将命名空间添加为层。(即 myNamespace.myClass MyClass = new myNamespace.myClass();) "

请注意,仅当您没有using myNamespace;声明或在项目中使用多个命名空间时才需要这样做。如果您始终在项目的默认命名空间中工作,则无需限定名称。

于 2013-08-02T21:04:49.180 回答
2

比较没有命名空间的生活是什么样子可能是个好主意。C 语言不支持命名空间。在它存在的很早的时候,open() 函数就被用来打开文件。

这意味着没有 C 程序员可以自己的函数使用名称“open”。

是不是很痛苦?

命名空间可帮助您使用简短的描述性名称。他们不添加图层,只会创建更长的名称。你可以很容易地写得更短,使用指令使它变得容易。

于 2013-08-02T21:20:44.110 回答
1

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

如果您将类命名为与另一个可见类相同的名称,则可能会出现冲突。例如,如果你给你的类命名Math并且有一个using System;using 语句,那么就会发生冲突,只能通过指定System.Math.

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

于 2013-08-02T20:59:18.057 回答