Вызывается каждый конструктор класса при добавляемом чертеже

Автор Тема: Вызывается каждый конструктор класса при добавляемом чертеже  (Прочитано 2935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Сделал небольшой тестик на VB
Думаю наверное на C# также будет так же (не проверял)

Подскажите, почему при каждом новом добавляемом или открываемом чертеже
вновь вызывается конструктор класса?
Что получается на каждый открываемый чертеж создается объект класса Commander?

Конструктор вызывается только в случае, когда делаешь команду "TEST"

Вод код теста

Код - vb.net [Выбрать]
  1. Imports Autodesk.AutoCAD.Runtime
  2.  
  3. <Assembly: CommandClass(GetType(PanelCommands.Commander))>
  4. Namespace PanelCommands
  5.     Public Class Commander
  6.         Public Sub New()
  7.             MsgBox("Привет! Я конструктор класса.")
  8.         End Sub
  9.         <CommandMethod("TEST")> _
  10.         Public Sub MyMet()
  11.             MsgBox("Мой метод.")
  12.         End Sub
  13.         Protected Overrides Sub Finalize()
  14.             MsgBox("Экземпляр умер.")
  15.         End Sub
  16.     End Class
  17. End Namespace



Отмечено как Решение Алексей (IdeaSoft) 05-04-2018, 21:21:07

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Потому что класс не статический

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Что получается на каждый открываемый чертеж создается объект класса Commander?
Да. Так и должно быть. Для нестатического класса (т.е. не имеющего описателя для C# - static, для VB.NET - Shared) с атрибутом CommandClassAttribute создаётся по экземпляру для каждого документа (открытого dwg-файла).

Тут есть интересный цикл статей:
http://through-the-interface.typepad.com/through_the_interface/2006/10/perdocument_dat_1.html
http://through-the-interface.typepad.com/through_the_interface/2006/10/perdocument_dat_2.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Да, точняк!
Спасибо за ответы.
Сделал шаред

Код - vb.net [Выбрать]
  1. Shared Sub New()

и все норм