C# 在C中,我们可以在运行时动态交换程序集吗#

C# 在C中,我们可以在运行时动态交换程序集吗#,c#,C#,考虑以下代码- namespace N1 { class A { //some implementation } class B { //some implemntation } } namespace N2 { class A { //slightly different implementation } class B { //slight

考虑以下代码-

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

namespace N2
{
    class A
    {
        //slightly different implementation
    }
    class B
    {
        //slightly different implementation
    }    
}
显然,我们不能同时使用这两个程序集-

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

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

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

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


A
B
提供的所有方法创建接口,在
N1
N2
参考的单独程序集中。在两个程序集中实现这些接口。然后连接一个IoC容器,在运行时解析正确的实现。

我认为您需要的是接口和一个IoC容器/工厂


A
B
提供的所有方法创建接口,在
N1
N2
参考的单独程序集中。在两个程序集中实现这些接口。然后连接一个IoC容器,在运行时解析正确的实现。

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

处理这个问题的一个典型方法是使用IoC的形式,通过一个库,如


如果使两个名称空间中的类型派生自相同的基类,或实现相同的接口,则可以从两个单独的程序集中
[Export]
类型。可以在运行时决定要编写的程序集。这样,您就可以根据需要
[导入]
类型,并获得适当的类型。

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

处理这个问题的一个典型方法是使用IoC的形式,通过一个库,如

如果使两个名称空间中的类型派生自相同的基类,或实现相同的接口,则可以从两个单独的程序集中
[Export]
类型。可以在运行时决定要编写的程序集。这样,您就可以根据需要
[导入]
类型,并获得适当的类型

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