Warum gibt es Schnittstelle / Klasse (IFoo, FooClass) Muster in Office Interop API?

StackOverflow https://stackoverflow.com/questions/1213033

  •  06-07-2019
  •  | 
  •  

Frage

In der Bibliothek Microsoft.Office.Interop.Visio jede Einheit (z.B. für Shape) wird als eine Klasse beschrieben (ShapeClass) und eine Schnittstelle, Form.

So für jedes Element Sie haben:

interface Shape { ... }
class ShapeClass : Shape { ... }

interface Page { ... }
class PageClass : Page { ... }

...

Warum ist es so konzipiert?

War es hilfreich?

Lösung

Der „Interop“ Teil des Namensraumes deutet an, dass dies tatsächlich eine COM-basierte API.

COM war Microsofts erster Versuch eines sprachneutralen Komponentenmodell für Entwickler, und eine seiner Kernaspekte war Interface-basiertes Design.

Also, in Ihrem Beispiel ShapeClass ist eine "Co-Klasse" genannt, die eine benannte Umsetzung der Shape Schnittstelle ist.

Co-Klassen wurden weltweit registriert (in der Win32-Registrierung) und erstellt auf der Grundlage ihre freundlichen Namen ( "Prog-ID") oder eine GUID, die so genannten "CLSID" werden könnten.

Andere Tipps

Ich denke, es wird sein, weil sie alle als COM-Objekte implementiert sind und die Schnittstelle ist es, den Vertrag für die Klasse Implementierung zu definieren - die Schnittstellen in IDL implementiert werden

Wiki COM

Weil das ist, wie COM funktioniert.

COM definiert Schnittstellen, die Komponenten implementieren. So ziemlich alles, was in COM basiert auf Schnittstellen. Die Schnittstellen sind wichtiger als die Klassen, die sie implementieren.

Dies wird auf der Grundlage der Art und Weise COM funktioniert.

Wenn Sie Beispiele für gute .Net Design suchen, tun nicht suchen in den Office-Interop-Bibliotheken (PIA). Sie sind direkte Wrapper um ihre COM-äquivalent und sind mäßig schrecklich mit in C # zu arbeiten.

Um die Office-Bibliotheken zu erleichtern die Arbeit mit, versuchen Sie die VSTO Power Tools

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top