gpt4 book ai didi

c# - 是否可以在 C# 中动态指定外部别名?

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

假设您有两个包含几乎相同代码的 DLL。它们之间只有微小的差异,但这些差异非常重要,需要保留不同的库。实际上,在我的特殊情况下,它们是第三方 Java 库,已使用 IKVM 转换为 .NET DLL,因此我们不能在不重写代码的情况下将它们合并为一个。这些代表外部供应商提供的服务器 API 的版本略有不同。

当我们在代码中使用这些库时,我们不得不编写两个完全相同的类,只是我们指定的外部别名不同。

例如:

extern alias Lib1;

namespace MyNamespace
{
public Class1
{
private Lib1::A a = new Lib1::A();

public Class1()
{
this.a.DoStuff();
}

// Uses Lib1 extern alias throughout
}
}

extern alias Lib2;

namespace MyNamespace
{
public Class2
{
private Lib2::A a = new Lib2::A();

public Class1()
{
this.a.DoStuff();
}

// Totally identical to Class1, except that it uses Lib2 extern alias throughout
}
}

Class1 中的所有代码与Class2 完全相同。只是别名不同。

当我们想要更新代码时,我们不得不将代码从一个类复制到所有其他类中。然后我们只需将一个别名替换为另一个。

有没有一种方法可以创建一个类,并在实例化该类时动态指定要使用的外部别名?

感谢您的帮助。

最佳答案

选项:

  • 针对单个 DLL 构建,然后只需切换 DLL 内容(即构建具有相同名称的两个 DLL,并且只需更改您使用的版本)
  • 创建具有两种不同实现的单一接口(interface),其中一种与每个库对话

就我个人而言,我可能会选择后者。不,不存在“动态外部别名”这样的上下文。

关于c# - 是否可以在 C# 中动态指定外部别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23394384/

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