AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.07.2008, 12:14   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
gl00mie

Как мне кажется, происходит путаница понятий

В системе Axapta создание объекта - это команда

X++:
myVar = new MyObject()
Кажется, что команда new вызывает непосредственно метод new() объекта. Однако если бы это было действительно так, то внутри метода new() объекта невозможно было бы сделать присвоение свойствам этого объекта или вызвать метод объекта.

Т.е. внутри метода new() экземпляр объекта уже существует. Внутри метода new() объекта вполне допустимо обращение к методам этого объекта через this.MyMethod().

На всякий случай напомню, что речь идет о классах, а не о формах или отчетах.

Это означает, что конструирование объекта Axapta происходит ДО вызова метода new() этого же объекта. Просто разработчики Axapta предоставили возможность ПОСЛЕ конструирования объекта добавить некий код.

По сути, new() - это событие, т.е. некий программный код, который выполняется автоматически, при подаче команды new на создание объекта.

А вот метод init() - это именно метод. Т.е. некий программный код, который надо запускать на выполнение явно. Специальной командой. Автоматического выполнения метода init() никогда не происходит. Только явно по команде.

С точки зрения разработчика - нет никакой разницы где именно писать код инициализации параметров объекта. В событии new() объекта или в методе init().

Отличия между ними только и исключительно в способе вызова. Выполнение new() произойдет автоматически, а для выполнения init() надо подать специальную команду. Как следствие, выполнение init() можно отложить, чтобы выполнить, например, ряд проверок. Или же вызвать метод init() повтороно, для переинициализации всех свойств объекта. А выполнение new() отложить невозможно.

Следовательно, логично в событии new() объекта делать безусловную инициализацию свойств объекта (значения по умолчанию для переменных). А в методе init() выполнять "условную" инициализацию свойств с последующим анализом значения, возвращаемого этим методом для принятия решения о дальнейшей работе с этим объектом.


PS:

А насчет того, что переменная myVar не существует пока не будет завершена команда new MyObject(), так к обсуждаемой проблеме это не имеет никакого отношения.

То же самое будет и с любой переменной, значение которой вычисляется в каком-либо методе любого класса. Пока вычисления не завершены, естесственно, значение не известно.
За это сообщение автора поблагодарили: alex55 (1).
Теги
init, crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Solutions Monkey: EP Page Life Cycle Blog bot DAX Blogs 0 18.02.2009 08:05
Не удаётся правильно настроить DataSource через метод init Dronas DAX: Программирование 1 08.10.2007 09:10
Два Dstasource с Range в init() PMS DAX: Программирование 7 28.10.2005 09:54
Метод Init на форме. NJD DAX: Программирование 1 25.08.2004 17:30
диалоговое окно в init (e) Report (a) Natasha DAX: Программирование 8 05.03.2003 16:42

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:30.