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

时间:2013-08-02 20:58:22

标签: c# namespaces

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

我知道你在尖叫,但敏捷和抽象怎么样,所以在代码和对象之间存在20层抽象。我不是在问它是否违反了这个月或那个敏捷的东西。通过不使用名称空间来实现真实世界的问题是什么?

编辑:

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

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

猜猜我应该使用using语句并加速...

5 个答案:

答案 0 :(得分:8)

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

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

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

第一个实际上到目前为止更重要。冲突不是 共同的。尽管如此,它们是可能的,并且明智地使用命名空间会阻止它们。

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

答案 1 :(得分:5)

  

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

没有创建真正的额外“图层”。命名空间纯粹允许组织类型的方式,并有助于防止命名冲突,因为项目变大并且使用了更多的库。

就运行时而言,没有名称空间 - 所有类型都是完全限定的,而C#中的名称空间只是更改了类型名称。关闭命名空间只会使您的类型名称更容易与其他名称冲突,但如果您在项目中不多次使用相同的名称,则对代码是否有效没有“实际影响”,或者使用与引用的程序集中的类型名称相同的名称,并通过using导入。


编辑以回应评论:

  

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

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

答案 2 :(得分:2)

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

这意味着没有C程序员使用“open”这个名称来表示自己的功能。

痛苦不是吗?

命名空间可帮助您使用简短的描述性名称。它们不添加图层,只创建更长的名称。 using 指令使您可以轻松编写更短的内容。

答案 3 :(得分:1)

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

如果您将类命名为与另一个可见类相同,则可能会发生冲突。例如,如果您为您的班级Math命名并使用using System;使用语句,则只会通过指定System.Math来解决冲突。

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

答案 4 :(得分:0)

没有什么可以阻止你转身:

namespace Foo { class Bar {} }

进入例如:

class Foo_Bar {}

如果这是你喜欢的。但是:

Foo.Bar优于Foo_Bar的优点是您可以使用using Foo;指令来保存一些输入:此后您不必反复输入完整的类型名称(与Foo_Bar)一样,但可以将其缩写为Foo

不使用命名空间(和using指令)的“危险”恰恰相反:你被迫完整地拼出每个类型的名字,这可能会非常繁琐。

相关问题