Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 05-04-2018, 20:04:52

Название: Вызывается каждый конструктор класса при добавляемом чертеже
Отправлено: Алексей (IdeaSoft) от 05-04-2018, 20:04:52
Сделал небольшой тестик на 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


Название: Re: Вызывается каждый конструктор класса при добавляемом чертеже
Отправлено: Александр Пекшев aka Modis от 05-04-2018, 20:08:09
Потому что класс не статический
Название: Re: Вызывается каждый конструктор класса при добавляемом чертеже
Отправлено: Александр Ривилис от 05-04-2018, 20:13:12
Что получается на каждый открываемый чертеж создается объект класса 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
Название: Re: Вызывается каждый конструктор класса при добавляемом чертеже
Отправлено: Алексей (IdeaSoft) от 05-04-2018, 20:22:57
Да, точняк!
Спасибо за ответы.
Сделал шаред

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

и все норм