Почему в интерфейсе Office Interop есть шаблон интерфейса / класса (IFoo, FooClass)?
-
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.
Если вы ищете примеры хорошего дизайна .Net, НЕ смотрите в библиотеках взаимодействия Office (PIA). Они являются прямыми обертками вокруг своего COM-эквивалента и умеренно ужасны для работы в C #.
Чтобы упростить работу с библиотеками Office, попробуйте VSTO Power Tools р>