04.05.2017, 15:11 | #1 |
Участник
|
i-neti: X++ in AX7: Статические члены класса. Часть 5
Источник: http://i-neti.ru/blog/397
============== Теперь можно задавать переменные класса как статические. Семантика точно такая же, как в C#, а именно: все экземпляры класса смогут использовать такой элемент, и, если один класс установит значение, другой класс может получить его. Очевидно, что использовать это следует с осторожностью. Но есть несколько случаев, где это может пригодиться, например, сейчас намного упростилась реализация шаблона проектирования singleton. Пример: подробнее Источник: http://i-neti.ru/blog/397
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
08.05.2017, 09:29 | #2 |
Участник
|
Кстати кто что думает по поводу вот такого использования статических членов
https://docs.microsoft.com/en-us/dyn...-runbase-class т.е. создается глобальная статическая переменная - ссылка на класс. далее создается handler на таблицу - который проверяет заполнена ли эта глобальная переменная и вызывает метод(кстати тут по моему у них опечатка - должно быть if (myrunningInstance) X++: if (runningInstance)
{
myRunningInstance.myArchiveUserLog(_sender as SysUserLog);
} причем это будет никак не поймать, ибо в новой сессии хендлера уже не будет |
|
08.05.2017, 09:47 | #3 |
NavAx
|
Мне показалось, что singleton работает не в пределах сессии, а в пределах thread. Я пытался с его помощью передать параметры в отчет, так вот отчеты работают в другои потоке (возможно для запуска отчета создается новая сессия) и singleton у них будет свой, чистый.
С его помощью можно много чего реализовать, только понять, что присходит в сисетеме, будет все труднее. Пример: есть таблица и мы хотим получить, что то типа - X++: void update() { MyTable myTableOrig = this.orig(); super(); if (myTableOrig.MyField != this.MyField) { do something.... } } P.S. Extension подход только усложняет систему и ее поддержку. Последний раз редактировалось raz; 08.05.2017 в 09:50. |
|
08.05.2017, 12:27 | #4 |
Участник
|
Цитата:
Семантика точно такая же, как в C#,
|
|
|
За это сообщение автора поблагодарили: AlexSD (3). |
08.05.2017, 23:06 | #5 |
Участник
|
|
|
08.05.2017, 23:40 | #6 |
Microsoft Dynamics
|
О, Макс, спасибо за статики в сессии. Пруф тут:
Цитата:
You declare static class members by using the static keyword. The static keyword instructs the system to create only one instance of the method, regardless of the number of times that you call new. This one instance is used throughout your session.
|
|
09.05.2017, 10:05 | #7 |
NavAx
|
А разве нет? За основу был взят такой код для передачи параметров в SSRS отчет, в отладчике было видно, что параметры в пределах одного thread передаются, но когда обращение было из отчета (data contract), то singleton был чист, при этом номер thread был другой.
Это легко проверить. |
|
|
|