Я вижу, что это вопрос .Net; однако, мышление может исходить из опыта Java. Это напоминает мне пункт 22 из Effective Java: Используйте интерфейсы только для определения типов .
Эта рекомендация не запрещает все свойства в интерфейсах. Он специально предназначен для интерфейсов, содержащих only properties.
Когда класс реализует интерфейс, интерфейс служит типом , который можно использовать для ссылки на экземпляры класса. То, что класс реализует интерфейс, должно поэтому сказать что-то о том, что клиент может сделать с экземплярами класса. Неуместно определять интерфейс для каких-либо других целей.
Один тип интерфейса, который не проходит этот тест, - это так называемый постоянный интерфейс . Такой интерфейс не содержит методов; он состоит исключительно из статических полей финала ...
Шаблон постоянного интерфейса плохо использует интерфейсы. То, что класс использует некоторые константы внутри, является деталью реализации. Реализация постоянного интерфейса вызывает утечку этой детали реализации в экспортируемый API класса ... это представляет обязательство: если в будущем выпуске класс будет изменен, так что ему больше не потребуется использовать константы, он все равно должен реализовать интерфейс обеспечить бинарную совместимость. Если нефинальный класс реализует постоянный интерфейс, все его подклассы будут иметь свои пространства имен, загрязненные константами в интерфейсе.
Конечно, сама Java (и, вероятно, C #) содержит примеры этих константных интерфейсов. В книге также говорится об этом.
В библиотеках платформы Java есть несколько постоянных интерфейсов ... Эти интерфейсы должны рассматриваться как аномалии и не должны эмулироваться.
Я согласен с предыдущими ответами, что я никогда не видел рекомендации избегать интерфейсов, содержащих как свойства, так и методы.