Автоматически реализованные свойства получения / установки

#c# #.net #properties #accessor #automatic-properties

#c# #.net #свойства #средство доступа #автоматические свойства

Вопрос:

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

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

Спасибо!

Комментарии:

1. На самом деле это не проблема. Вы можете легко преобразовать автоматическое свойство в ручное позже, если обнаружите, что вам нужна та или иная функция. Это не кардинальное изменение.

Ответ №1:

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

Ответ №2:

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

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

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

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

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

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

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

Ответ №3:

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