1

考虑以下代码 -

namespace N1
{
    class A
    {
        //some implementation
    }
    class B
    {
        //some implemntation
    }
}

namespace N2
{
    class A
    {
        //slightly different implementation
    }
    class B
    {
        //slightly different implementation
    }    
}

显然我们不能同时使用这两个程序集——

解决方法是使用完全限定的类名。重构使用 N1 命名空间类的 1000 行代码时。在流程启动时做出一次决定,是必须使用 N1 还是使用 N2。

比 C++ 中的条件编译功能更高级的东西

#ifdef debug
#include <N1.h>
#elif
#include <N2.h>
#endif

对不起,如果这听起来不可能,但出于我的好奇心,我想知道是否有可能 -

if (...)
    {
        using N1; 
    }
else
    {
        using N2;
    }
4

2 回答 2

2

我认为您想要的是接口和 IoC 容器/工厂。

为所有方法创建接口,AB在一个单独的程序集中提供N1N2引用。在两个程序集中实现这些接口。然后连接一个在运行时解析正确实现的 IoC 容器。

于 2012-09-17T16:43:33.530 回答
2

但是,您描述的using基于 - 的方法将不起作用。“使用命名空间”实际上只是一个编译时构造,因此它对运行时行为没有影响。在运行时,使用完全限定类型。

处理此问题的一种典型方法是通过MEF之类的库使用 IoC 的形式。

如果您使两个命名空间中的类型派生自相同的基类,或实现相同的接口,则可以[Export]将类型来自两个单独的程序集。可以在运行时决定组成哪个程序集。这使您可以[Import]根据需要键入,然后您将获得适当的类型。

于 2012-09-17T16:43:38.863 回答