请考虑以下代码 -
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;
}
答案 0 :(得分:2)
我认为你想要的是接口和IoC容器/工厂。
在A
和B
引用的单独程序集中,为所有方法N1
和N2
提供接口。在两个程序集中实现这些接口。然后连接一个IoC容器,它在运行时解析正确的实现。
答案 1 :(得分:2)
然而,您描述的基于using
的方法不起作用。 “使用命名空间”实际上只是一个编译时构造,因此它对运行时行为没有影响。在运行时,使用完全限定类型。
处理此问题的一种典型方法是通过MEF等库使用IoC的形式。
如果您使两个名称空间中的类型派生自相同的基类,或实现相同的接口,则可以[Export]
来自两个单独程序集的类型。可以在运行时决定组合哪个程序集。这样您就可以根据需要使用[Import]
类型,并获得相应的类型。