Мне редко хотелось иметь настоящую константу в интерфейсе — обычно они имеют больше смысла в классах. Практика использования интерфейса Java для того, чтобы только содержать константы (чтобы сократить количество операций ввода в классах, которые их используют), отвратительна; Я бы поместил константы в интерфейсы только там, где они были связаны с функциональностью внутри самого интерфейса.
Однако иногда я думал, что было бы неплохо определить перечисление внутри интерфейса, если это единственный контекст, в котором ожидается использование перечисления. Интересно, что VB позволяет это, хотя C# этого не позволяет.
По сути, оба из них были бы способом превратить интерфейс в «мини-пространство имен» само по себе. Однако я не могу сказать, что очень часто пропускал его при написании C#. Как любит говорить команда C#, функции не удаляются — они добавляются, и стоимость добавления функции очень высока. Это означает, что функция действительно должна нести свой вес — прежде чем функция будет добавлена, должна быть значительная польза. Я лично не поставил бы это очень высоко в списке.
Связанная мысль: было бы неплохо иметь возможность определить вложенный класс внутри интерфейса, обычно это реализация интерфейса — либо для выражения его контрактов, либо для действия в качестве реализации «по умолчанию» для ситуаций, когда есть такая штука.
person
Jon Skeet
schedule
01.02.2010