假设有一个实现了IBaseClass接口的类BaseClass。
然后有一个继承自IBaseClass的接口IClass。
接着有一个实现了IClass接口的类class。
例如:
[ComVisible(true), InterfaceType(ComInterfaceType.IsDual), Guid("XXXXXXX")]
public interface IBaseClass
{
[PreserveSig]
string GetA()
}
[ComVisible(true), InterfaceType(ComInterfaceType.IsDual), Guid("XXXXXXX")]
public interface IClass : IBaseClass
{
[PreserveSig]
string GetB()
}
[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("XXXXXXX")]
public class BaseClass : IBaseClass
{
public string GetA() { return "A"; }
}
[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("XXXXXXX")]
public class Class : BaseClass, IClass
{
public string GetB() { return "B"; }
}
当将程序暴露给COM接口后,如果我创建一个名为“Class”的实例,它将不允许我调用GetA()方法。
在.tlb文件中查看我的IDL时,IClass接口如下所示:[
odl,
uuid(XXXXXXXXXXXXXXXXXXXXX),
version(1.0),
dual,
oleautomation,
]
interface IClass : IDispatch {
[id(0x60020000)]
BSTR GetB();
}
看起来IClass根本没有继承IBaseClass!
如果我去掉IClass继承IBaseClass的部分,只是将方法添加到接口中,那么就可以正常工作。
如何让C#在COM中启用这种继承呢? 我不想在可以继承它们时重新实现接口。
请查看此链接.Net COM Limitation
如果有人知道为什么会这样,或者有比复制粘贴到我的“派生”接口更好的解决方法,请告诉我。如果没有,我会在几天内标记一个答案。