15.05.2018, 16:37 | #21 |
Moderator
|
Цитата:
Там, кстати, в D365 не сделали какую-то проверку Best practices на эту тему ? |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
15.05.2018, 16:39 | #22 |
Участник
|
|
|
16.05.2018, 02:29 | #23 |
Banned
|
Цитата:
Соответственно и InventTrans и CustTrans это его дети. Все в соответствии с ООП, полиморфизм. Забавно Нечего common использовать тем кто ругается на var |
|
16.05.2018, 09:19 | #24 |
Участник
|
Цитата:
Попробуйте в C# написать X++: Object o; List l; o = l; // номально l = (List)o; // номально l = o as List; // нормально l = o; // ошибка компиляции |
|
16.05.2018, 09:39 | #25 |
Moderator
|
Кстати - а вообще появился в D365/DAX2012 кастинг таблиц?
Можно писать if (common is CustTable) или (common as InventTable)? |
|
16.05.2018, 09:45 | #26 |
Участник
|
Вроде да, но с особенностями
https://docs.microsoft.com/en-us/dyn.../xpp-operators Tables All tables inherit directly from the Common system table, unless they explicitly inherit from a different table. The Common table can't be instantiated. It doesn't exist in the underlying physical database. The Common table inherits from the xRecord class, but in a special way that isn't appropriate for the is keyword or the as keyword. When the as keyword is used to perform an invalid downcast among tables, the target variable references an unusable non-null entity. Any attempt to de-reference the target variable will cause an error that stops the program. The is and as keywords and extended data types Each extended data type has an Extends property. The style of inheritance that this property controls differs from the style of inheritance that the is and as keywords are designed for. |
|
16.05.2018, 12:31 | #27 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: belugin (5). |
16.05.2018, 12:53 | #28 |
Banned
|
Цитата:
Поправка: IS тоже работает. |
|
16.05.2018, 13:00 | #29 |
Участник
|
Цитата:
Если же вы подразумеваете, что там может быть как journalTrans, так и что-то другое, то это полезно, так как в случае несоответсвия у вас будет null, который можно обработать, а не исключительная ситуация. https://stackoverflow.com/questions/...vs-as-operator |
|
|
За это сообщение автора поблагодарили: EVGL (5). |
16.05.2018, 13:54 | #30 |
Banned
|
Цитата:
InventTrans inventTrans = _custTrans; // должна быть ошибка компиляции InventTrans inventTrans = (СustTrans)common; // должна быть ошибка компиляции Как понимаю вопрос в таком downcast void foo(Common _commonCustTrans) { InventTrans inventTrans = (InventTrans)_commonCustTrans; } Тут ничего не поделать, все законно. Имена переменных ничего не значат, а передается родитель. void foo(Parent _childA) { ChildB childB = (ChildB)_childA; } А вот если передавать конкретный тип, а не common, то да можно жаловаться void foo(ChildA_childA) // вместо common например CustTable _custTable { ChildB childB = (ChildB)_childA; // обязана ругаться } |
|
16.05.2018, 14:00 | #31 |
Участник
|
Цитата:
Цитата:
Как понимаю вопрос в таком downcast
void foo(Common _commonCustTrans) X++: void foo(CustTrans _custTrans)
{
}
Common x;
foo(x); |
|
16.05.2018, 14:12 | #32 |
Banned
|
Цитата:
Manager extends Person; Worker extends Person; void callWorker(Worker _worker){}; Person person; callWorker(person); |
|
16.05.2018, 14:33 | #33 |
Участник
|
Должен быть compiler error как в С#, например, пока не будет явного каста.
|
|
|
За это сообщение автора поблагодарили: ax_mct (3). |
16.05.2018, 16:10 | #34 |
Banned
|
Цитата:
Как-то ассоцировалось с VB.NET vs С#.NET где по-сути только синтаксис отличия, а тут как бы не X++.NET, а типа интеграция для поддержки старого X++ кода. Наверное эта интеграция и жрет все ресурсы А где можно почитать впечатления клиентов от работы в D365FO с точки зрения быстродействия? HTML он там тоже может быть прожорливый, или кэшируется слой презентации как-то? |
|
16.05.2018, 16:23 | #35 |
Участник
|
Цитата:
Цитата:
Наверное эта интеграция и жрет все ресурсы
В отличие от 2012 он генерирует сборки, то есть такая ситуация, что часть кода не компилируется, не позволяется. В отличие от C#, есть просто гигантская сборка под названием Application Suite и применены всякие трюки чтобы билдить и юзать ее частично. Еще в отличии от C# код хранится в XML для поддержки слоёв . Кусочек который я трейсил при помощи PerfView занимался, в-основном, дересерелизацией метаданных из этого XML. Возможно там есть задел для ускорения. |
|
16.05.2018, 17:30 | #36 |
Banned
|
Цитата:
Сообщение от belugin
В отличие от 2012 он переписан на C#, то есть код сравнительно свежий.
В отличие от 2012 он генерирует сборки, то есть такая ситуация, что часть кода не компилируется, не позволяется. В отличие от C#, есть просто гигантская сборка под названием Application Suite и применены всякие трюки чтобы билдить и юзать ее частично. Еще в отличии от C# код хранится в XML для поддержки слоёв . Кусочек который я трейсил при помощи PerfView занимался, в-основном, дересерелизацией метаданных из этого XML. Возможно там есть задел для ускорения. Хранить в .cs., поддержку слоев реализовать структурой файловой системы где хранятся эти .cs. (Tables\USR\CustTable.cs) Но спасибо за опыт и комментарии, познавательно. Разве что остается вопрос как много китайцев работает в датском офисе, кто-то же придумывает эти семиколесные велосипеды |
|
16.05.2018, 19:02 | #37 |
Участник
|
Цитата:
Еще непонятно, что делать с гигантским монолитным ApplicationSuite. Цитата:
Хранить в .cs., поддержку слоев реализовать структурой файловой системы где хранятся эти .cs. (Tables\USR\CustTable.cs)
Цитата:
Но спасибо за опыт и комментарии, познавательно. Разве что остается вопрос как много китайцев работает в датском офисе, кто-то же придумывает эти семиколесные велосипеды
P.S. The future of C# |
|
16.05.2018, 21:04 | #38 |
Banned
|
Цитата:
Сообщение от belugin
Резeльтат будет в простых случаях многословнее и в каких-то случаях тормознее (LINQ) и надо будет наделать дополнительных правил проверски, на корректность этого LINQ.
Еще непонятно, что делать с гигантским монолитным ApplicationSuite. Я бы просто хранил в системе контроля версий по веткам. Они недалеко от Редмонда. P.S. The future of C# "Once again, we happy to announce, this is becoming traditional, C# has a future and we're going to talk about it". И им смешно и аудитории Гигантский монолитный ApplicationSuite это кстати демонстрация недостатка компилируемого языка на больших проектах. Отчасти одна из причин того что C# как имел светлое будущее 15 лет назад так к этому будущему до сих пор и стремится. Ну не знаю, мне кажется сделать конвертор X++ в С# задача технически более осмысленная чем городить все эти прослойки. Но политически да, "тот же код с другим интерфейсом" была такая задача. Вся для удобства и счастья X++ программиста, и код X++ тот же и абстракция от UI, и точки расширения где хочешь, и массаж плеч и стоп...Спасибо MS за заботу хочется сказать |
|
17.05.2018, 09:08 | #39 |
Участник
|
Цитата:
Цитата:
Отчасти одна из причин того что C# как имел светлое будущее 15 лет назад так к этому будущему до сих пор и стремится.
|
|
17.05.2018, 10:20 | #40 |
Участник
|
Visual Basic .NET имеет такой же рейтинг как C#
Как такое вообще может быть? что и кто интересно на нем разрабатывает. т.е. сколько я народу не знаю, никогда даже не слышал, сайт по поиску работы тоже 0 возвращает |
|
Теги |
ax7, dynamics 365 for operations, x++ |
|
|