Новое в синтаксисе X++ MS Dynamics 365

В этой статье мы познакомимся с новыми возможностями X++ Dynamics 365, которые позаимствовали из синтаксиса C#. Для тех, кто ранее разрабатывал на языках с Си-подобным синтаксисом новые функции X++ будут приятным сюрпризом.

Объявление переменных

Раньше все локальные переменные нужно было помещать в начало метода, в котором они используются. Сейчас появилась возможность объявления переменных в любой части кода. Переменные, которые будут объявлены внутри условных операторов или циклов будут использоваться только внутри этих операторов.

Пример объявления переменной внутри цикла 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!

Добавить комментарий

Sidebar