假设我有一个实现IBaseClass的类BaseClass
然后我有一个继承IBaseClass的接口IClass.
然后我有一个名为class的类,它实现了IClass.
例如:
[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"; }
}
Run Code Online (Sandbox Code Playgroud)
当暴露给COM时,如果我创建一个"Class"实例,它就不允许我调用GetA().
在.tlb文件中查找我的IDL时,我的IClass界面如下所示:
[
odl,
uuid(XXXXXXXXXXXXXXXXXXXXX),
version(1.0),
dual,
oleautomation,
]
interface IClass : IDispatch {
[id(0x60020000)]
BSTR GetB(); …Run Code Online (Sandbox Code Playgroud)