C# 使用ComInterop时,将dynamic替换为泛型
我有很多类,它们包装了来自第三方应用程序的ComInterop对象。下面的伪代码演示了设置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
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);
}