1

.Net でのシェル拡張機能の記述に関するこの記事によると、コードを記述するときに自然に行うようにシェル インターフェイスを継承することは機能しません。私は自分のコードでもこれを観察しました。

動作しません:

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 に答える