Почему в интерфейсе Office Interop есть шаблон интерфейса / класса (IFoo, FooClass)?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

В библиотеке Microsoft.Office.Interop.Visio каждая сущность (например, Shape) описывается как класс (ShapeClass) и интерфейс Shape.

Итак, для каждого элемента у вас есть:

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

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

...

Почему это так устроено?

Это было полезно?

Решение

" Взаимодействие " часть пространства имен намекает, что на самом деле это API на основе COM.

COM был первой попыткой Microsoft создать независимую от языка модель компонентов для разработчиков, и одним из ее основных принципов был дизайн на основе интерфейса.

Итак, в вашем примере ShapeClass называется «co-class», который является именованной реализацией интерфейса Shape .

Совместные классы были зарегистрированы глобально (в реестре Win32) и могут быть созданы на основе их понятного имени («prog-ID») или GUID, называемого «CLSID».

Другие советы

Я полагаю, это будет потому, что все они реализованы как COM-объекты, и интерфейс предназначен для определения контракта для реализации класса - интерфейсы будут реализованы в IDL

вики COM

Потому что так работает COM.

COM определяет интерфейсы, которые реализуют компоненты. Практически все в COM основано на интерфейсах. Интерфейсы важнее, чем классы, которые их реализуют.

Это основано на том, как работает COM.

Если вы ищете примеры хорошего дизайна .Net, НЕ смотрите в библиотеках взаимодействия Office (PIA). Они являются прямыми обертками вокруг своего COM-эквивалента и умеренно ужасны для работы в C #.

Чтобы упростить работу с библиотеками Office, попробуйте VSTO Power Tools

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top