Как избежать циклических ссылок: предварительное объявление недействительно, если мне нужны методы объекта?

У меня большой проект, и я получил круговую ссылку, я не знаю, как исправить. Я читал о предварительных объявлениях, но если я хорошо понял, публичные методы / данные этого объекта не являются публичными, если я использую предварительное объявление.

Я понимаю, что лучший способ исправить это - разработать программу с самых первых строк кода, но иногда вы наследуете большой код, который несет в себе проблемы такого рода, и добавляете простую функцию в код, который оказывается в беспорядке.,

Итак... есть ли другой способ решения этой проблемы?

1 ответ

Решение

Если класс A использует класс B, но ни один из его методов, класс A может пересылать объявление класса B. Если класс B использует класс A, то предварительное объявление удалит половину циклической зависимости, по крайней мере, в том, что касается компилятора.

Если A требуется более глубокое знание B, чем просто его имя, вы можете использовать интерфейс (абстрактный класс) для инвертирования зависимости от A к BIe. A использует новый C (вместо B), который экспортирует по крайней мере тот интерфейс, который требуется для A, и B реализует / расширяет C.

Я видел, что это использовалось главным образом для сокращения времени компиляции - это ваша причина спрашивать, или это больше связано с "хорошим" дизайном?

Другие вопросы по тегам