私は COM インターフェイスに新しい機能を追加してきましたが、それを行う (そして後方互換性を維持する) 唯一の方法は、古いインターフェイスを継承して新しいメソッドを追加する新しいインターフェイスを作成することです。私はこれを試みましたが、私の階層はすでに非常に複雑です。
これが私のインターフェースが現在どのようになっているとしましょう:
IBaseInterface | | IDerivedInterface
ベース インターフェイスにいくつかの機能を追加すると、次のようになります。
IBaseOldInterface | | IBaseInterface | | IDerivedInterface
この新しい機能を追加したので、新しい IDerivedInterface を作成する必要がありますか? 現時点で試してみましたが、すべてのケースで適切に機能するとは限りません。
本当に確認と、可能であれば理由の説明が欲しいだけです
私の理想的な状況とその理由をさらに説明する必要があります。
すべての派生クラスが使用できる IBaseInterface クラスにいくつかのメソッドを追加したいと考えています。私が可能だと思ったのはこれです:
IBaseOldInterface / \ IDerivedOldInterface IBaseNewInterface \ / IDerivedNewInterface
Diamond Inheritance は避けるべきだということは理解していますが、それらは単なるインターフェイスなので、問題ないと思います。
ユーザーが INewDerivedInterfaces の 1 つを要求すると、この新しい構造を持つ。クエリ インターフェイスは、それが INewDerivedInterface であるか IOldDerivedInterface であるかにかかわらず、その IID の正しいインターフェイスを返します。