extern alias dll1;
extern alias dll2;
...
public void DoStuff1(){
dll1::NameSpace.Class.Method();
}
public void DoStuff2(){
dll2::NameSpace.Class.Method();
}
我希望能够做的是:
public void DoStuff(alias a){
a::NameSpace.Class.Method();
}
别名似乎无法像这样使用。
附录:dll1和dll2是同一个dll的不同版本。
答案 0 :(得分:0)
将来自不同别名的代码保存在不同的文件中,并在每个文件中使用部分类。 (部分类允许您为不同文件中的同一个类编写代码。)应该这样做。
例如:
文件1:
extern alias dll1;
partial class foo
{
public void DoStuff1(){
dll1::NameSpace.Class.Method();
}
}
文件2:
extern alias dll2;
partial class foo
{
public void DoStuff2(){
dll2::NameSpace.Class.Method();
}
}
答案 1 :(得分:0)
这是一些反思代码。它基于Hilyard和Teilhet在O'Reilly的C#Cookbook中给出的代码。我改编了它并删除了一些东西,我没有测试过,但如果你使用反射,这样的东西对你有用。你只需要传递正确的程序集名称(仍然没有弄清楚如何处理具有相同命名空间的dll,但必须有一种方法),以及正确的类和方法名称,并且此函数将调用适合你的方法。
反射的一个问题是你丢失了一些类型检查,因为你必须使用通用对象,你必须使用字符串来表示命名空间,类型和成员。
object InvokeMethod(string assembly, string type, string method, object[] parameters)
{
Assembly asm = Assembly.LoadFrom(assembly);
Type classtype = asm.GetType(type, true, false);
object dynamicObject = Activator.CreateInstance(classtype);
MethodInfo invokedMethod = classtype.GetMethod(method);
return invokedMethod.Invoke(dynamicObject,parameters);
}
答案 2 :(得分:0)
我最终在.Net 4.0中使用了动态。
将外部别名与动态结合使用是解决此问题的最简洁,最简单的解决方案。
答案 3 :(得分:0)
你能创建一个枚举来指定使用哪个别名吗?然后你会有像
这样的东西ObservableCollection