|
![]() |
#1 |
Участник
|
Цитата:
Где это жизненно можно применить?
Проблема в том, что может случиться обновление системы и разработчики MS допишут свой код в validateFIeld. В этом случае придется объединять код руками. А можно добавленный код выделить в отдельный метод validateField_MY. И этот метод прицепить обработчиком события "после validateField". Тогда при обновлении просто изменится код validateFIeld, а validateField_MY останется неизменным на нашем слое как и факт того, что он является обработчиком. Это может сэкономить время и делает более явной отделение кастомизации от исходного кода. Или вот, например, есть такая приблуда - InfologStackTrace. Когда я ее писал, я специально не стал помещать ее код полнотью в XPO, чтобы случайно не затерли какой-то другой код (там надо добавить строчку в начале Info.add). Нужно импортировать xpo а потом дописать info.add. Теперь в Ax2012 можно сделать так: - добавить нужный код в свой обработчик события перед вызовом info.add - переместить весь код утилиты включая обработчик события в свою модель - выгрузить модель в файл. Тогда для установки утилиты можно будет просто загрузить в приложение модель. А для удаления - удалить модель. И разбираться в коде утилиты, сравнивать там что-то не надо. А если кто-то напишет приблуду, которая, допустим, записывает добавляемые сообщения инфолога в файл, он может сделать по тому же сценарию и загрузить свою модель независимо. И эти две утилиты модно будет сразу накатить одновременно, не исправляя руками info.add - просто у этого метода будут два подписчика. Кстати, документацию по Ax2012 уже выложили в MSDN - см про события в AOT Последний раз редактировалось belugin; 30.06.2011 в 20:51. |
|
|
За это сообщение автора поблагодарили: mazzy (2), MikeR (5), S.Kuskov (2). |
![]() |
#2 |
Участник
|
С validateField наверное немного неудачный пример. т.к. изменить возвращаемое значение метода перехватив событие его вызова видимо всё-таки нельзя. И наверное это правильно, иначе были бы конфликты между несколькими "перехватчиками". Да и к тому же перехватывать видимо можно только методы помеченные ключевым словом delegate (это предположение). Кстати, в случае наличия нескольких подписчиков возникает вопрос очерёдности их обработки. Может они вообще параллельно могут выполняться
![]() Так же интересно, каким способом в обработчике события можно получить ссылку на объект у которого это событие произошло? На сколько я понял из примера, входящие параметры обработчика совпадают с входящими параметрами перехватываемого метода. Сработает если переписать метод appleGrew так: X++: delegate void appleGrew(int appleId, Apples _this = this) { } UPD. Спасибо за ссылку на MSDN многие вопросы отпали Оказывается и возвращаемое значение можно поменять и даже значения входных параметров. И всё-таки интересно как это всё будет жить в случае нескольких подписчиков? Последний раз редактировалось S.Kuskov; 30.06.2011 в 22:02. |
|
Теги |
event, ax2012 |
|
|