Office Interop APIにインターフェイス/クラス(IFoo、FooClass)パターンがあるのはなぜですか?
-
06-07-2019 - |
質問
Microsoft.Office.Interop.Visioライブラリでは、各エンティティ(Shapeなど)は、クラス(ShapeClass)およびインターフェイスShapeとして記述されています。
つまり、各要素について:
interface Shape { ... }
class ShapeClass : Shape { ... }
interface Page { ... }
class PageClass : Page { ... }
...
なぜこのように設計されているのですか?
解決
" Interop"名前空間の一部は、これが実際にCOMベースのAPIであることを示唆しています。
COMは、開発者向けの言語に依存しないコンポーネントモデルに対するMicrosoftの最初の試みであり、その中核となる理念の1つはインターフェイスベースの設計でした。
したがって、あなたの例では、 ShapeClass
は" co-class"と呼ばれ、これは Shape
インターフェースの名前付き実装です。
コクラスはグローバルに(Win32レジストリに)登録され、フレンドリ名(" prog-ID")または" CLSID"と呼ばれるGUIDに基づいて作成できます。
他のヒント
それらはすべてCOMオブジェクトとして実装され、インターフェイスはクラス実装のコントラクトを定義するために存在するためだと思います-インターフェイスはIDLで実装されます
これがCOMの仕組みだからです。
COMは、コンポーネントが実装するインターフェイスを定義します。 COMのほとんどすべてがインターフェイスに基づいています。インターフェイスは、それらを実装するクラスよりも重要です。
これは、COMの動作方法に基づいています。
優れた.Netデザインの例を探している場合は、Office相互運用ライブラリ(PIA)を NOT 探してください。これらは、同等のCOMを直接包むラッパーであり、C#で作業するには適度にひどいです。
Officeライブラリを使いやすくするには、 VSTO Power Toolsを試してください。