Интерфейс не должен иметь свойств? - PullRequest
15 голосов
/ 10 июня 2009

Мой коллега по офису сказал мне сегодня, что плохая практика - использовать свойства в интерфейсах. Он рассказал об этом в какой-то статье (статьях) MSDN, которую я не смог найти (ну, я несколько раз пробовал в Google, возможно, с неверными ключевыми словами). Он также сказал мне, что в интерфейсе должны быть только методы. Теперь я знаю, что это не является строгим правилом, поскольку очевидно, что в .net вы можете сделать подпись свойства в интерфейсе и скомпилировать его.

Но правда ли, что это плохая практика / дизайн / упс? И почему?

Также было бы полезно указать правильную литературу или веб-ресурс.

Спасибо

Ответы [ 13 ]

0 голосов
/ 30 января 2011

Единственный недостаток, который я вижу в свойствах по сравнению с методами, состоит в том, что, хотя нет проблем с интерфейсом с методом get, интерфейсом с методом set и интерфейсом, который объединяет их (сценарий, который обеспечит максимальную гибкость с ковариацией и контравариантностью), свойства не сочетаются между собой. Я не уверен, почему свойство чтения и записи не просто рассматривается как свойство чтения и записи, но это не так. Если интерфейс будет поддерживать свойство только для чтения и свойство только для записи с тем же именем, любая попытка получить доступ к свойствам через комбинированный интерфейс потерпит неудачу на основании заявленной неоднозначности.

0 голосов
/ 10 июня 2009

Я не вижу причин, чтобы не иметь Properties как часть вашего интерфейса. Как еще вы реализуете доступ к данным членов? Получите методы и набор методов вместо свойств. Это было бы просто ужасно, и так, 1990-е годы.

0 голосов
/ 10 июня 2009

Практически свойство представляет собой набор из двух функций: одну для получения значения и одну для установки значения. Несмотря на то, что свойства являются первоклассными «возможностями» C #, это все еще верно.

Почему свойства не будут разрешены в интерфейсах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...