Небольшой пример: http://drive-cad-with-code.blogspot.com/2012/03/using-objectoverrule-to-prevent-entity.html
думаю любой, кто прочитает эту статью, найдет для себя хоть одну причину не использовать этот способ.
Я приведу пару причин из статьи:
1) выбрасывание unhandled exception
"There is one thing to be aware of with this "throw an exception" in overriden Open() method approach: you cannot test if your Overrule works or not in Visual Studio's' debugging mode. When the line of code that throws the exception runs, Visual Studio treats the exception as unhandled (as it should), thus the debuggung process stops. One can only test this type of Overrule in normal AutoCAD session without Visual Studio's debugging process attached.."
Будет ли Crash? Думаю, что если нечто неизвестное начало работать с объектом, безопаснее всего запомнить состояние этого объекта и позволить неизвестному сделать свое дело. После получения управления можно решить, что делать с этим объектом, оставить как есть или восстановить.
2) артефакты
"However, there is one thing that is annoying me: if I try to move the block, the block is simply disappeared on the screen. Although I can tel it is still there, but not visible, until I issue "REGEN" command. Of course, the block is still there, not moved, thanks to the Overrule"
Допустим, у меня тысячи объектов на чертеже. Как я вообще пойму, что этот объект стал невидимым? Это разве не изменение? По-моему защита не сработала.
Допустим все же использовать этот неуправляемый костыль и решить ряд проблем. Остается момент: есть команды, которые паразитно запускаются без наличия объектов. Вроде выделения области на чертеже. Да, объект не меняется, но новая команда запущена, а значит выполнение текущей должно быть прекращено.
Правильный выход - не допустить порождения команды действиями в чертеже. Без модальных окон и prompt/jig сейчас это невозможно или способ мне неизвестен.