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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.12.2020, 09:47   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Эммм... Макс, если честно, то я совсем запутался. А раскручиывать цепочку цитат и контр-вопросов совсем нет никакого желания.
Но совершенно очевидно, что у тебя есть особое мнение по этому поводу.
Также несомненно, что я могу дико ошибаться.
Мне интересно, если бы кто-то у кого под руками есть Ax4 или Ax3 сделал следующий эксперимент.

class MyClass { MyClass test(){ return null } }
class MyExtendedClass extends MyClass { SysAnyType test(){ return null } }

Цитата:
1. что можно сделать с подобными тренарными операторами в ax2012? (примеры рассыпаны выше по ветке)
Можно попробовать ввести промежуточные переменные с определением конкретного типа.

Цитата:
2. почему и зачем это возникло в ax2012 на твой взгляд? понятно, что для совместимости в CIL.
Я думаю, это ошибка или недоделка вывода типов для тернарной операции.

Цитата:
А в CIL это зачем и почему раньше этого в X++ не было?
Тут надо разбираться как работает CIL внутри я это не так хорошо знаю. В том числе с точки зрения безопасности.

В X++ до 2012 нет гарантии, что если ты вызвал метод x на переменной типа y ты вызовется именно метод класса y. В переменной может лежать объект любого класса и, если у него есть метод x то вызовется он.

А если нет, то будет исключение. Причем не когда возникает несовместимое присваивание, а когда вызов, что может быть гораздо позже и труднее искать основную причину ошибки.

Цитата:
3. какова ситуация с тренарными операторами в D365FO и почему так случилось?
Пример из заголовка и твой пример компилируются без ошибок (после добавления недостающего метода). Только ворнинги:

Warning 'as' is obsolete: '"Use the AS operator instead."'

Цитата:
4. а также любые твои мысли на тему ветки - будет интересно.
Был компилятор написанный на C++ сто лет назад, притворяющийся языком со сторогой статической типизацией, но при этом позволяющий иногда нарушать безобразия.

Потом решили приделать CIL и привести в соответствие типизацию компилятора и рантайма. Чтобы раньше получать сообщения об ошибках. С тернарным оператором что-то не так - я думаю какая-то ошибка или недоделка в выводе типов.

В Dyn365FO компилятор переписали на C# (Вернее, доделали XLNT, который занимался раньше просто дополнительными проверками) и эту недоделку устранили, насколько я вижу.
За это сообщение автора поблагодарили: Logger (3).
Теги
ax2012, ax2012r3, тернарный оператор

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012: базовые типы и результаты операторов div и mod отличаются в X++ и в CIL gl00mie DAX: Программирование 0 25.09.2014 11:13
Ax3 - Модуль Учет затрат egorych DAX: Функционал 15 12.12.2013 17:58
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
роли, типы пользователей и лицензирование AX2012 wojzeh DAX: Администрирование 1 22.07.2011 23:50
Date Daido DAX: Программирование 6 28.09.2007 11:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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