2010-06-13 211 views
1

我正在构建一个类库,并将其默认名称空间用作“System”。假设我正在创建一个通用数据结构,称为PriorityQueue并将其放置在System.Collections.Generic命名空间下。类库参考问题

现在,当我从另一个项目中引用该库时,我无法再在“System.Collections.Generic”命名空间下看到PriorityQueue。虽然库被引用,但我无法访问它中的任何类。

任何人都可以请一些灯。我知道,如果我改变命名空间,一切都会好的,但我想创建一个无缝的集成,就像.net框架本身与其他项目一样,以便可以引用该库并忘记其命名空间。

+1

不知道为什么这是downvoted这可能是一个坏主意,但它不是一个坏问题 – msarchet 2010-06-13 16:12:21

+0

虽然添加到系统命名空间是一个坏主意,我想知道如何做到这一点很有趣。 – apoorv020 2010-06-13 16:36:02

+1

[类库引用问题]的可能重复(http://stackoverflow.com/questions/3033042/class-library-reference-problem) – 2010-06-13 17:20:31

回答

2

把东西放入系统命名空间是一个坏主意。首先,最好明确知道你使用的东西在哪里。但更重要的是,如果微软发布新的东西导致与你的命名冲突,你的东西就会崩溃。

第二个原因可能是你无法看到你的代码。

2

如果您正在为类使用System命名空间,那么它们将在System中找到。

如果你想让它们在System.Collections.Generic中找到,那么你需要把它们放在那里。

但让我们清楚,在System. *中放置类是一个坏主意。

1

只需创建自己的名称空间,例如因为将类放置在预定义的框架名称空间中并不是一个好主意。 MS可能会在后面的框架中引入相同的类,导致出现问题。

3

这是一个非常糟糕的主意。假装你没有想到它,并使用真正的命名空间。

也没有与.NET Framework“无缝集成”。如果我们想访问List<T>类,那么我们就必须写

using System.Collections.Generic; 

如果你把你的类MyCompany.Collections.Generic,那么你会得到完全由.NET Framework中实现了“无缝”的同一级别本身。

+0

我非常清楚,改变命名空间将会起作用,这就是我一直在做的事情。但是这次我做了一次实验,但失败了。 我的问题是,mscorlib和System.dll共享相同的命名空间,但为什么不能我的?这是我原来的问题。对不起,模糊。 – 2010-06-13 16:22:15

+0

@Anindya Chatterjee如果每个人都试图使用你的想法会怎么样? – 2010-06-13 16:33:36

0

如果它不清楚:这是一个真的坏主意。

系统名称空间应该被认为是保留和禁止的。如果微软决定在将来与您的System.mycrap.blah标识符冲突的框架更新中引入一个类,那么您将手上进行一些相当庞大的重构,并且对于部署到客户,紧急更新和系统停机的潜在责任。

您不会创建自己的名为“String”的类。同样的道理(双关),不要使用保留的名称空间。

此外,命名空间“系统”并不真正描述您的命名空间的内容。通常情况下,命名空间应该表示一些东西 - 比如BlogEngine,DatabaseCore等。将所有内容都包含进系统中就像命名所有变量“x”或“temp”一样,这意味着创建者并不真正理解这一层次的代码划分和组织。

1

有人提到这是一个坏主意吗?有几个原因让你无法看到课程。从汇编参考文献来看,只有一个很好的:你忘记了公开宣布课程。

+0

+1实际上提到该类不可见的原因。 – 2010-06-13 16:23:44

+0

:)对不起,并非如此。 – 2010-06-13 16:26:54