我正在构建一个类库并将其默认名称空间用作“System”。假设我正在创建一个通用数据结构,例如PriorityQueue,并将其放在System.Collections.Generic命名空间下。
现在当我从另一个项目引用该库时,我再也看不到“System.Collections.Generic”命名空间下的PriorityQueue了。虽然引用了库,但我无法访问其中的任何类。
请有人对此有所了解。我知道,如果我更改名称空间,一切都会好的,但我想创建一个无缝集成,如.net框架本身与其他项目,以便可以引用该库并忘记它的名称空间。
答案 0 :(得分:3)
这是一个非常糟糕的主意。假装你没有想到它,并使用真正的命名空间。
其中一个与.NET Framework没有“无缝集成”。如果我们想要访问List<T>
类,那么我们必须编写
using System.Collections.Generic;
如果您将课程放在MyCompany.Collections.Generic
中,那么您将获得与.NET Framework本身完全相同的“无缝性”级别。
答案 1 :(得分:2)
将内容放入系统命名空间是个坏主意。首先,最好明确知道您使用的东西在哪里。但更重要的是,如果微软发布导致与你的命名冲突的新内容,那么你的东西就会破裂。
第二个原因可能是你无法看到你的代码的原因。
答案 2 :(得分:2)
如果您使用的是System
命名空间,则可以在System
中找到它们。
如果您希望在System.Collections.Generic
中找到它们,则需要将它们放在那里。
但是,让我们明确一点,将类放在System。*中是一个坏主意。
答案 3 :(得分:1)
只需创建自己的命名空间,例如Anindya.Collections.Generic
,因为在预定义的框架命名空间中放置类不是一个好主意。 MS可能会在以后的框架中引入同一个类,从而导致问题。
答案 4 :(得分:1)
有人提到这是一个坏主意吗?您无法看到课程的原因很少。从汇编参考文献中可以看出,只有一个好的:您忘了将该类声明为公开。
答案 5 :(得分:0)
如果不清楚:这是一个真的坏主意。
系统名称空间应视为保留和禁止。如果Microsoft决定在将来与您的System.mycrap.blah标识符冲突的框架更新中引入一个类,那么您将需要进行一些非常大量的重构,并且在部署到的应用程序中客户,紧急更新和系统停机的潜在责任。
您不会创建自己的名为“String”的类。同样的道理(双关语),不要使用保留的名称空间。
此外,命名空间“System”并未真正描述命名空间的内容。通常,名称空间应该表示某些东西 - 比如BlogEngine,DatabaseCore等。将所有内容写入系统就像命名所有变量“x”或“temp”一样,并暗示创建者并不真正理解这种级别的代码描述和组织。