Это зависит от договора (подразумеваемого или явного) с потребителями вашего интерфейса.
Если все потребители перестраиваются при перестройке интерфейса, тогда управляет , изменяя его просто, просто измените его и исправьте все разрывы (исправление самих разрывов может быть сложным).
Если вы ожидаете, что потребители будут перекомпилировать каждый раз, когда вы выпускаете новую библиотеку / приложение, вам нужно будет оказать им некоторую помощь, чтобы указать, какие изменения требуются, то, как вы справляетесь с этим, зависит от того, может ли изменение произойти во время обслуживания. старые функции / свойства. Если затем вы сможете разумно использовать [Obsolete («Использовать новый метод Blah вместо», false)] хотя бы в одном выпуске, за которым следует [Obsolete («...», true)] в следующем выпуске, это обеспечит чистую миграцию. путь
Если вы попытаетесь сохранить бинарную совместимость, тогда атрибуты «Устаревшие» позволят это сделать, не позволяя пользователям продолжать использовать устаревшую функциональность при перекомпиляции.
Если ваш контракт подразумевает, что двоичная и исходная совместимость должны поддерживаться, скажем, в течение 5 лет (короткий период времени для API-интерфейсов платформы ОС), у вас нет иного выбора, кроме как использовать совершенно новый интерфейс, добавив методы к Интерфейс будет нарушать код, реализующий его (либо при компиляции, при проверке типа или при вызове метода в зависимости от строгости загрузчика типов).