我是COM和c#的新手,我想为第三方程序公开的COM对象添加功能。
最初我的目的是继承COM对象类,但我发现它不是那么直接(例如here)。
目前,我有两个接口(即IComAuto
和ComAuto
)和一个关联的类(ComAutoClass
)。
要将自定义方法添加到ComAuto
个对象,我创建了一个继承自此接口的类ComObjectWrapper
,并通过在私有字段中存储ComAuto
对象来实现它。
class ComObjectWrapper : ComAuto
{
private readonly ComAuto ComObj;
public ComObjectWrapper() : base()
{
ComObj = new ComAuto();
}
public short method1(object param)
{
return ComObj.method1(param);
}
...
}
我觉得这不是最好的方法,因为我需要将对原始方法的任何调用重定向到内部ComAuto
对象。
我尝试通过在VS2015中将ComAutoClass
属性设置为Embed Interop types
来直接从false
继承。这导致一些方法在我已编写的代码期望object
时将值返回为string
。因此,我必须通过所有编写的代码向string
添加一些演员表。不理想,而且我没有完全理解Embed Interop types
是什么。
如果有人能够对此有所了解或指向一些有用的文章(我在MSDN上发现的内容对于像我这样的初学者来说听起来有点神秘),我将不胜感激。
答案 0 :(得分:1)
听起来像extension methods的完美用例:
public static class ComAutoExtensions
{
public static short Method1( this ComAuto com, object param )
{
return com.GetShortValue( param );
}
}