![]() |
#7 |
Участник
|
gl00mie
Как мне кажется, происходит путаница понятий В системе Axapta создание объекта - это команда X++: myVar = new MyObject() Т.е. внутри метода 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). |