click fraud detection

X++ в AX7: Методы расширения. Часть 12

Дата публикации: 28.09.2017

Вы когда-нибудь сталкивались с тем, что Microsoft предоставил класс или таблицу в которой не достает методов, которые облегчили бы вашу жизнь? Если это так, у вас может возникнуть соблазн добавить его самостоятельно, используя перекрытие. И вы наверняка заплатите за это при обновлении!

Вы будете довольны, сейчас AX7 X ++ поддерживает методы расширения, подобно C#.

Предположим, мы хотим добавить метод fullName в таблицу DirPersonName. Вот как вы это сделаете, не касаясь таблицы DirPersonName. Создайте этот новый класс: 

static class MyDirPersonName_Extension

{

    static public PersonName fullName(DirPersonName _person)

    {

        return strFmt('%1 %2 %3', _person.FirstName, _person.MiddleName, _person.LastName);

    }

}

Что нужно запомнить:

  1. Название класса должно иметь постфикс "_extension". Класс должен быть статическим.
  2. Расширенные методы должны быть статическими.
  3. Тип первого параметра определяет, какой тип будет расширен.

Теперь вы можете наслаждаться своим методом расширения:

while select dirPersonName

{

    info(dirPersonName.fullName());

}

 

Обратите внимание:

  1. При вызове методов расширения вы не указываете первый параметр - который подразумевается из типа экземпляра.
  2. Если метод расширения принял любые дополнительные параметры - они (конечно) должны быть предоставлены.

Это не нарушает инкапсуляцию. У метода расширения есть доступ к общедоступным полям и методам типа.

Обновление - начиная с осеннего релиза 2016, синтаксис теперь более чистый - и вы можете сделать гораздо больше (см. Здесь). 

Вышеприведенный пример можно переписать следующим образом:

 [ExtensionOf(tableStr(DirPersonName))]

final class MyDirPersonName_Extension

{

    public PersonName fullName()

    {

        return strFmt('%1 %2 %3'this.FirstName, this.MiddleName, this.LastName);

    }

}

 

Этот пост относится к предварительному показу MICROSOFT DYNAMICS AX7; представлен как есть и не влечет за собой передачу каких-либо прав. 

Оригинальная статья по ссылке.

Другие статьи по теме:

1 часть "X++ в AX7: ключевое слово "var" доступна тут.

2 часть "X++ в AX7: ключевые слова "finally" и "using" доступна тут.

3 часть "X++ в AX7: определение типа может включать 80 знаков" доступна тут

4 часть "X++ в AX7: элементы с уровнями доступа private и public" доступна тут.

5 часть "X++ в AX7: статические члены класса" доступна тут.

6 часть "X++ в AX7: ключевые слова Client/Server" доступна тут.

7 часть "X ++ в AX7: статическая подписка на событие" доступна тут.

8 часть "X ++ в AX7: статические классы" доступна тут.

9 часть "Х ++ в АХ7: Internal keyword" доступна тут.

10 часть "Х ++ в АХ7: вещественные типы данных" доступна тут.

11 часть "Х ++ в АХ7: ключевое слово Readonly" доступна тут.

 

Акция "Тест-драйв Сопровождения"

Попробуй сопровождение АХ до подписания договора!


Узнать подробнее

Другие записи в блоге

22.11.2017
17.11.2017
Модуль «Сводное планирование» / «Журналы» / «Резервный запас» / «Строки» / кн. «Строки журнала» / «Создать строки».1. Вычисляется количество месяцев (numOfMonth) между датой начала и датой конца...
18.10.2017
Какую цену вы бы заплатили, чтобы иметь возможность делать так в X ++?for (int i = 1; i <= n; i++)   {}    Или так:

Подпишитесь на блог

Все интересные статьи нашего блога на Вашем почтовом ящике!


Подписка

Служба контроля качества сервиса

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


Письмо директору