2014-10-21 2 views
0

Я разрабатываю Microsoft Word Addin, и мне нужно расширить свойства и/или поведения некоторых объектов Word Base, как Word.Comment.Лучший способ расширить Interop Word базовые объекты

Например, из этого кода в C#:

Word.Comment комментарий = ActiveDocument.Comments.Add (MyRange, туЗЬптд);

Как проходит Word.Comment класс и сделать этот фабричный метод Comments.Add() возвращает экземпляр моего простирающегося класса Word.Comment? Возможно ли это? Если нет, существуют ли другие способы добавления свойств к базовым объектам?

ответ

1

Вы не можете просто расширить фактические объекты слов. Есть несколько способов, как вы можете это сделать.

Возможно, лучшим способом было бы обернуть объект Word.Comment в одном из ваших объектов. Например:

class MyComment{ 
    private Word.Comment comment; 

    // some additional logic 
} 

Тогда вы бы просто использовали этот класс вместо класса комментариев Word. Вы можете сделать что-то подобное для метода.

Есть несколько хорошо известных шаблонов, описывающих такую ​​логику: Decorator, Adapter. Он часто используется при работе с сторонними API.

Вы также можете добиться аналогичного поведения с extension methods.

+0

Методы расширения могут фигурировать как хорошая альтернатива. Инкапсуляция Word.Comment с указанными шаблонами предупреждает меня о повторяющейся проблеме манипуляции объектной моделью Word без должного выпуска COM-объектов. (читайте это, например, http://www.add-in-express.com/creating-addins-blog/2013/11/05/release-excel-com-objects/) – Koryonik