.NET用于单个类的多个命名空间

时间:2010-09-27 15:46:41

标签: c# .net vb.net namespaces

是否可以让一个类驻留在两个名称空间内,我该怎么做?

澄清一下:我们有一个类库(比如root命名空间是classLib1),它随着时间的推移而增长(更多的类),我想在逻辑上将类分组到不同的命名空间。 但是,某些较旧的类需要分组到这些新的命名空间(例如classLib1.section1),这样做会破坏使用此类库的其他程序集中的遗留代码。所以我希望能够使用两个名称空间来引用一个类,直到我们可以逐步淘汰旧类。

我找不到任何关于此的信息,这表明人们不想这样做的原因!?!

3 个答案:

答案 0 :(得分:22)

不,没有办法给单个类两个名称(命名空间实际上只是类名的一部分)。

作为一种变通方法,您可以将类移动到新位置,并在旧位置(Facade Pattern)周围创建薄包装器。当然,更好的解决方案是移动类并相应地修复遗留代码。

答案 1 :(得分:4)

作为一种解决方法,您可以在需要时将该类“使用”到第二个命名空间中:

namespace classLib1.section2
{
    public myBigClass
    {

并且在旧命名空间中使用它的每个文件中都可以添加一行

namespace classLib1.section1
{
    using myBigClass = classLib1.section2.myBigClass;

作为临时补丁,直到你正确修复它。

答案 2 :(得分:4)

Type Forwarding是在.net 2.0中引入的,这意味着您可以使用TypeForwardedToAttribute属性来指示现在可以在AssemblyY中找到最初存在于AssemblyX中的类型。

我很确定如果你分成多个组件,这只是适当/适用的,但即使没有,也值得知道。