gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:35 25 4
gpt4 key购买 nike

考虑以下代码-

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;
}

最佳答案

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

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

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

关于c# - 我们可以在 C# 中在运行时动态交换程序集吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com