Новое в синтаксисе X++ MS Dynamics 365
В этой статье мы познакомимся с новыми возможностями X++ Dynamics 365, которые позаимствовали из синтаксиса C#. Для тех, кто ранее разрабатывал на языках с Си-подобным синтаксисом новые функции X++ будут приятным сюрпризом.
Contents
Объявление переменных
Раньше все локальные переменные нужно было помещать в начало метода, в котором они используются. Сейчас появилась возможность объявления переменных в любой части кода. Переменные, которые будут объявлены внутри условных операторов или циклов будут использоваться только внутри этих операторов.
Пример объявления переменной внутри цикла for
void MyMethod() { for (int i = 0; i < 10; i++) { info(strfmt("i is %1", i)); } }
Пример объявления переменной в теле цикла for
for(int i = 1; i < 10; i++) { str s = int2str(i); info(s); }
Статические конструкторы и статические поля
Статический конструктор используется для инициализации любых статических данных или выполнения определенных действий, которые необходимо выполнить только один раз. Статический конструктор не имеет доступа к локальным переменным класса. Статический конструктор объявляется следующим образом
static void TypeNew()
Статические переменные — это переменные, объявленные с использованием ключевого слова static. Концептуально они относятся к классу, а не к экземпляру класса.
Пример использования статического конструктора и переменной
public class MyClass { private static MyClass instance; private void new() { ... } static void TypeNew() { instance = new MyClass(); } public static MyClass Instance() { return MyClass::instance; } }
Инициализация класса в коде
MyClass i = MyClass::Instance();
Прямой доступ к переменным класса
Теперь к переменным экземпляра класса можно обращаться напрямую без использования методов parm.
Пример
public class MyClass { public int field1; public str field2; void new() { this.field1 = 1; this.field2 = "Manana"; } } public class MyClass1 { MyClass myClass; int field1; void new() { myClass = new MyClass(); this.field1 = myClass.field1; } }
Константы
Макросы по-прежнему поддерживаются в X++, но использование констант имеет ряд преимуществ:
— Константы видны в IntelliSense
— Константы используются в перекрестных ссылках
— Константа может быть объявлена с указанием модификатора доступа
— В отладчике можно увидеть значение константы
Пример объявления константы
public const str MyConstant = 'Value';
Пример использование в коде
str value = MyClass::MyConstant;
Тип Var
Теперь можно объявить переменную без явного указания типа, если компилятор может определить тип из выражения инициализации. Нужно обратить внимание, что переменная по-прежнему имеет конкретный тип. Это может облегчить чтение кода, но нужно правильно использовать тип Var. Нужно учитывать следующие правила:
— Использовать тип Var можно для локальных переменных, если в выражении инициализации тип является очевидным
— Не нужно использовать тип Var, если из выражения инициализации тип не является очевидным
— Можно использовать тип Var для счетчиков циклов
— Можно использовать тип Var в операторе using
Блок finally в операторе try/catch
Оператор try/catch теперь может включать необязательный блок finally, который будет выполнятся независимо от того как отработает код в блоке try.
Пример использования блока finally
try { // ... } catch { // обработка исключения } finally { // выполнятся независимо от того как отработает код в блоке try }
Директива using
Использование директивы using обеспечивает доступ к определенным объектам, не созданным в X++, без указания сборки. Так же using используется для создания псевдонима сборки.
Пример использования директивы using
using System; using IO = System.IO; public class MyClass { public static void Main(Args a) { Int32 i; str s; s = IO.Path::ChangeExtension(@"c:\temp\test1.txt", ".xml"); } }
Comments
So empty here ... leave a comment!