Por que há de interface / classe (IFoo, FooClass) padrão no Office Interop API?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Na biblioteca Microsoft.Office.Interop.Visio cada entidade (por exemplo Shape), é descrito como uma classe (ShapeClass) e uma interface, Shape.

Assim, para cada elemento que você tem:

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

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

...

Por que é concebido como este?

Foi útil?

Solução

A parte "Interop" das sugestões de namespace que esta é realmente uma API baseada em COM.

COM foi a primeira tentativa da Microsoft em um modelo de componente de linguagem neutra para desenvolvedores, e um dos seus princípios fundamentais era design baseado em interface.

Assim, no seu exemplo, ShapeClass é chamado de "co-class", que é uma implementação chamada da interface Shape.

Co-classes foram registrados globalmente (no Registro Win32) e poderia ser criado com base em seu nome amigável ( "prog-ID") ou um GUID, chamado de "CLSID".

Outras dicas

Eu acho que vai ser porque todos eles são implementados como objetos COM ea interface está lá para definir o contrato para a implementação de classe - as interfaces será implementado em IDL

wiki COM

Porque é assim que funciona COM.

COM define as interfaces que os componentes implementar. Praticamente tudo no COM é baseado em interfaces. As interfaces são mais importantes que as classes que implementá-las.

Este é baseado na obra maneira COM.

Se você está procurando exemplos de bom design Net, faça não olhar no Escritório de interoperabilidade bibliotecas (PIAs). Eles são wrappers diretos em torno de sua COM equivalente e são moderadamente terrível para trabalhar com C #.

Para tornar as bibliotecas de escritório mais fácil trabalhar com, tente as VSTO Power Tools

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top