Показать сообщение отдельно
Старый 01.12.2011, 16:31   #1  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
! Ax 3.0 SP 3. Интересный факт с передачей параметров во внутренний метод
Разбираясь с одним вопросом (комуй интересно вот с этим) случайно наткнулся на интересный факт

компилятор не проверяет передаваемые параметры в методах, которые написаны внутри других методов (или внутри джоба).

вот пример:
X++:
static void Job685(Args _args)
{
    void mthd1(int  _i)
    {
        int i;
        ;

        i++;
    }
    ;

    mthd1();
}
как мы видим метод mthd1() имеет один обязательный параметр, но вызываю я его без параметров, и никаких ошибок не выдается, ни на момент компиляции, ни на момент выполнения!

теперь обратная ситуация:
X++:
static void Job685(Args _args)
{
    void mthd1()
    {
        int i;
        ;

        i++;
    }
    ;

    mthd1(1);
}
метод mthd1() не имеет никаких параметров на входе, но при вызове этого метода, я ему передаю единичку. И вновь компилятор молчит, но при выполнении джоба, все таки открывается отладчик и появляется окошко о неверно вызванном методе!

P.S. я всегда был против такого использования методов, но иногда необходимость заставляет так писать.

В общем будте внимательны, при передаче параметров во внутренние методы!

P.S.1. Чуть не забыл, в Ax2009 эту ситуацию исправили, и компилятор на такие вещи реагирует
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: mazzy (5), Pustik (3), Krasher (1).