我已向自己证明,编译和运行应用程序不需要命名空间。但是,不使用命名空间有哪些危险和陷阱?它创建了我试图避免的层。
我知道你在尖叫,但敏捷和抽象怎么样,所以在代码和对象之间存在20层抽象。我不是在问它是否违反了这个月或那个敏捷的东西。通过不使用名称空间来实现真实世界的问题是什么?
编辑:
创建一个独立的类dll,这样在类项目中没有冲突。当我将其包含在必须使用完全限定名称的其他项目中时,试图避免。 myNamespace.myClass MyClass = new myNamespace.myClass();
从评论看,命名冲突是最大的问题。
猜猜我应该使用using语句并加速...
答案 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
指令)的“危险”恰恰相反:你被迫完整地拼出每个类型的名字,这可能会非常繁琐。