1

根据这篇关于在 .Net 中编写 shell 扩展的文章,在编写代码时继承 shell 接口是行不通的。我也在自己的代码中观察到了这一点。

不起作用:

public interface IPersist {
    // stuff specific only to IPersist
}

public interface IPersistFolder : IPersist {
    // stuff specific only to IPersistFolder
}

是否有效:

public interface IPersistFolder {
    // stuff specific to IPersist only
    // stuff specific to IPersistFolder only
}

文章指出了这个事实:

瞧,它奏效了!请注意,我已经放弃了 IPersistFolder 是从任何东西继承而来的任何想法,只是在其定义中包含了来自 IPersist 的存根。坦率地说,我不能告诉你为什么会这样,但它肯定工作得很好,不应该给你带来任何问题。

所以我会问这个人不知道的问题;为什么原始代码不起作用?

4

1 回答 1

3

COM 不支持继承。COM 接口声明在具有继承性的 SDK 头文件中定义,但它们旨在由 C++ 编译器解析。它确实支持继承。IPersistFile 接口的具体实现必须提供所有方法的实现,包括来自 IUnknown 和 IPersist 的方法。IUnknown 由 CLR 处理。

于 2010-04-18T03:37:14.707 回答