Использование статических и экземплярных методов команд

    Методы команд могут быть объявлены либо как экземплярные, либо как статические. Статические методы команды объявлены с ключевым словом static в C#, или с ключевым словом Shared, используемым VB.NET. Экземплярные методы команд - это элементы класса, объявленные как public, но без ключевого слова static (или Shared для VB.NET).

    Для экземплярного метода команды тип включения метода инстанцируют отдельно для каждого открытого документа. Это означает, что каждый документ получает частную копию данных экземплярной команды. Таким образом нет никакой опасности перезаписать специфичные для документа данные, когда пользователь переключает документы. Если экземплярный метод должен предоставить данные для глобального использования - это можно сделать, объявив метод как static или же путём использования переменных, объявленных как static. 

    Для статического метода команды модуль управляемой оболочки на этапе выполнения не должен инстанцировать тип включения. Единая копия данных метода используется, независимо от контекста документа. Статические команды обычно не используют данные, ориентированные на документ и не требуют специального рассмотрения для режима MDI.

    Экземплярный и статический методы могут быть определены с помощью флагов команды, для обозначения особых требований. Например, экземплярный метод может быть объявлен с атрибутом, который устанавливает флаг CommandFlags.Session. Это означает, что команда должна выполняться в контексте сессии приложения, но также поддерживает данные и на документ. Пример такой команды в AutoCAD  - команда PROPERTIES.

    Аналогично, статический метод может быть объявлен без флага CommandFlags.Session. Эта комбинация полезна для команд, которые работают в контексте документа, но не должны поддержать данные на документ.

    Опции флага команды описаны в ObjectARX в разделе ObjectARX Reference => AcEd Classes => AcEdCommandStack Class => AcEdCommandStack Methods => AcEdCommandStack::addCommand Method.

Comments