Показать сообщение отдельно
Старый 17.03.2022, 10:15   #19  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Интересная вещь творится (в AX4).
Случай похожий, поэтому сюда пишу.
Вот есть метод в базовом классе, ничего не менял, не трогал. Да и код на другом слое просто не позволяет ничего сделать.
X++:
void parmRecId(RecId _recId = 0)
{
;
    recId = _recId;
}
Код конечно так себе, решил сначала в наследнике добавить измененный.
X++:
RecId parmRecId(RecId _recId = recId)
{
;
    recId = _recId;
    
    return recId;
}
Естественно, пишет ошибку из-за несоответствия возвращаемых типов. А тест-то уже написан, решил просто перед именем префикс из подчеркивания сделать. Сохранился, вроде все ОК. parmRecId - в базовом классе, _parmRecId - в наследнике. Проверяю, валится в стек-трейс, что класс-наследник содержит нескомпилированный код. По сути получается, что переименовав метод, я создал новый, а старый стал невидимым и тупо остался в классе.
Ситуация не из простых, когда код находится на слое VAR. У нас многие классы написаны другой компанией-внедренцем очень и очень небрежно, и мы с 2008 года поддерживаем этот legacy и по сей день исправляем баги.
Иногда приходится просто мириться с тем, что невозможно изменить сигнатуру метода. В более сложных случаях - создаем новые классы, старые помечаем как obsolete, аккуратно меняем все вызовы в системе и не трогаем более.
__________________
// no comments

Последний раз редактировалось dech; 17.03.2022 в 10:18.