Интересная вещь творится (в 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, аккуратно меняем все вызовы в системе и не трогаем более.