【发布时间】:2011-03-01 00:09:42
【问题描述】:
我目前正在使用托管代码中的 COM 对象,并为此使用新的动态类型。这在某些领域效果很好,但在其他领域可能会成为问题。
我正在考虑如何才能两全其美,动态类型的灵活性(后期绑定)以及对 RCW(早期绑定)的支持
以某种方式将动态类型包装在更易于管理的结构中。我想知道是否有一个首选的方法(如果它甚至是一个好主意)或者我应该考虑什么。
目前我想出的两个基本思路如下:
首先,创建一个允许我以托管方式调用动态类型方法的静态类。
public static class ComObjectWrapper
{
public static void SomeMethod(dynamic comObject, int x)
{
comObject.someMethod(x);
}
public static bool GetSomeProp(dynamic comObject)
{
comObject.getSomeProp();
}
public static void SetSomeProp(dynamic comObject, bool foo)
{
comObject.setSomeProp(foo);
}
}
其次,创建一个使用 com 对象构造的类,然后将其所有成员映射到托管属性、方法等。
public class ComObjectWrapper
{
private dynamic comObject = null;
public ComObjectWrapper(dynamic comObject)
{
this.comObject = comObject;
}
public void SomeMethod(int x)
{
comObject.someMethod(x);
}
public bool SomeProp
{
get
{
return comObject.getSomeProp();
}
set
{
comObject.setSomeProp(value);
}
}
}
还有其他方法可以解决这个问题吗?我错过了什么愚蠢的东西!?
【问题讨论】:
-
如果您完全可以选择 RCW,那么使用 dynamic 就没有意义了。几乎所有的 COM 服务器都支持它,请导入类型库。
-
对不起,我完全不同意——例如;如果我无法控制的类型库被更新,那么任何基于其 RCW 的应用程序都会被破坏。其次,类型库的所有版本呢,我只能针对一个版本。本质上,我想后期绑定以避免版本依赖于我无法控制的库。
标签: c# design-patterns com dynamic c#-4.0