C# 使用ComInterop时,将dynamic替换为泛型

C# 使用ComInterop时,将dynamic替换为泛型,c#,generics,com-interop,C#,Generics,Com Interop,我有很多类,它们包装了来自第三方应用程序的ComInterop对象。下面的伪代码演示了设置 class BaseWrapper : IBaseWrapper { // some classes that derived classes must implement public abstract object[] GetRow(int i); public abstract string Foo(string s) public abstract string B

我有很多类,它们包装了来自第三方应用程序的ComInterop对象。下面的伪代码演示了设置

class BaseWrapper : IBaseWrapper
{
    // some classes that derived classes must implement
    public abstract object[] GetRow(int i);
    public abstract string Foo(string s)
    public abstract string Bar(int i, string s)
}

class WrapperA : BaseWrapper
{
    ExternalComApp.IComInteropObjectA a = ..some COM object A..
    public override object[] GetRow(int i)
    {
        return a.GetRow(i).ToArray<object>();
    }
    public override string Foo(string s)
    {
        return a.Foo(s);
    }
    public override string Bar(int i, string s)
    {
        return a.Bar(i, s);
    }
    public string JustInA()
    {
        return a.MethodX();
    }
}

class WrapperB : BaseWrapper
{
    ExternalComApp.IComInteropObjectB b = ..some COM object B.. 
    public override object[] GetRow(int i)
    {
        return b.GetRow(i).ToArray<object>();
    }
    public override string Foo(string s)
    {
        return b.Foo(s);
    }
    public override string Bar(int i, string s)
    {
        return b.Bar(i, s);
    }
}
我可以通过传递
a
b
从派生类调用它。但是,使用
dynamic
有严重的缺点(我最不担心的是,这仍然很重要:它会使我的汇编速度变慢),如果可能的话,我希望避免使用它


我的问题是:有没有一种方法可以不使用
dynamic
关键字来实现这一点?我尝试使用泛型,但失败了,我甚至不确定泛型的概念是否适用于这里。

您可以修改
icomineteropobjecta
icomineteropobjecta
定义吗?i、 e.是否添加另一个接口?否,它们是第三方应用程序的一部分。我更新了问题以反映这一点。
protected internal object[] GetRow(dynamic obj, int i)
{
    return obj.GetRow(i);
}