Автоматически реализованные свойства get / set - PullRequest
2 голосов
/ 25 апреля 2011

Есть ли какой-либо недостаток в том, чтобы позволить C # создавать частные вспомогательные поля, которые создаются с помощью автоматического создания свойств (т. Е. {Get; set})?

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

Спасибо!

Ответы [ 3 ]

6 голосов
/ 25 апреля 2011

Самая большая проблема, с которой я столкнулся, заключается в том, что она часто очень ограничивает при рассмотрении сценариев связывания. Обычно при использовании привязки данных необходимо реализовать INotifyPropertyChanged , который не поддерживается автоматическими свойствами.

4 голосов
/ 25 апреля 2011

Если вы используете BinaryFormatter, изменение автоматически внедряемых свойств (или из них) является критическим изменением, поскольку имена полей имеют значение для BF. Конечно, есть одно простое решение: не используйте BF!

Вы также не можете добавить атрибуты в поле , используя автоматические свойства.

Нет инициализаторов полей.

Не верно readonly для использования с неизменяемостью.

Вы не можете добавить логику, очевидно; без лени, проверки, побочных эффектов или уведомлений.

Со структурами вам нужно вызывать :this() для пользовательских конструкторов, что ужасно.

В остальном же: они великолепны. Я большой поклонник.

2 голосов
/ 25 апреля 2011

Самая большая проблема в том, что вы не можете работать с вспомогательными полями, так как они созданы компилятором.Это означает, что вы не можете объявить их постоянными или только для чтения, это означает, что вы не можете добавить логику для доступа к ним (например, ленивая инициализация) и т. Д. Хорошая новость заключается в том, что, начиная с autoproperty, рефакторинг использует поле поддержки.легко, когда у тебя есть причина.

...