Я возиться с двумя объектами из двух COM-компонентов, однако они в основном одно и то же с другим подходом и немногими разными (но технически это разные классы)
Скажем, есть объект a
и b
Я собираюсь разобраться с:
var app = Marshal.GetActiveObject("MotherClassOfA&B");
NamespaceA.A a = app.OpenAsA("random-filepath") ;
NamespaceB.B b = app.OpenAsB("random-filepath") ;
Я хочу получить доступ к некоторому члену a
, который также доступен с b
, но, тем не менее, это другой класс
public void DoWorkA(NamespaceA.A target){
DealWith(target.member1);
Check(target.member2);
BlahBlah(target.member3);
... // many others
}
public void DoWorkB(NamespaceB.B target){
DealWith(target.member1);
Check(target.member2);
BlahBlah(target.member3);
... // many others same as DoWorkA
}
Хотя они имеют одно и то же имя, typeof target.member1
из a
- это NamespaceA.someClassA
, в то время как typeof target.member1
из b
- NamespaceB.someClassB
, но у них одинаковое имя (для большинства членов)
Q: DoWorkA
и DoWorkB
почти одинаковы, можно ли написать универсальный метод DoWork
для a
и b
?
p.s. Я попытался DoWork<T>(T target) where T:A,B
, но его не удалось собрать, поскольку Visual Studio не может сказать, target.member1
вызывает someClassA
или someClassB
Ошибка member1
является неоднозначной ссылкой между NamespaceA.someClassA.member1
и NamespaceB.someClassB .member1
Для тех, кто интересуется, в частности, они:
a
- AutoCAD.AcadDocument
, b
- AXDBLib.AxDbDocument
И нет класса или интерфейса IDocument
, который делает a is IDocument
и b is IDocument
обоими true